今天临校师兄QQ上说有没有批量删除文件名中的空格的方法。这类问题像我这等懒人加闲人是最喜欢的了。于是满口答应下来说试试看。
我们的网络中心有一台FreeBSD服务器供学校的Unix爱好者登录学习,兼之网络中心可以在里面物色新的成员。这个服务器是由我来维护的,招新人也是由我负责的。
为了便于管理和教学,我计划在/home目录下间了一个pub目录,然后再在每个用户的目录下建一个符号连接。这样所有的资料或者考题等等的都可以放到pub里。可是那么多的用户不可能一个个的去建符号连接吧?
当时的解决方法是这样,从/etc/passwd中读出每个用户的主目录,然后在用一个for循环来进行创建符号连接的动作,整套命令可以一次完成:
#for homedir in `grep 'home' /etc/passwd |awk -F: '{print $6}'`;do ln -s /home/pub $homedir/pub;done;
我想上次完成任务这么轻松,可这次到命令行一看才觉得有一点紧张了。本来去掉空格用sed就可以,可把文件名传递给sed后sed会去处理文件的内容而不是文件名。还有通过变量传递文件名后,shell就会把空格分成的每一段当成不同的文件来处理,摆弄了半天,终于用下面的命令搞定
export IFS=":";for i in $(ls);do mv $i `echo $i|sed 's// //g'`;done;export IFS=" "
关键指出在于使用了“:”作为分割符,这样shell才不会把文件中的空格断开。
我们的网络中心有一台FreeBSD服务器供学校的Unix爱好者登录学习,兼之网络中心可以在里面物色新的成员。这个服务器是由我来维护的,招新人也是由我负责的。
为了便于管理和教学,我计划在/home目录下间了一个pub目录,然后再在每个用户的目录下建一个符号连接。这样所有的资料或者考题等等的都可以放到pub里。可是那么多的用户不可能一个个的去建符号连接吧?
当时的解决方法是这样,从/etc/passwd中读出每个用户的主目录,然后在用一个for循环来进行创建符号连接的动作,整套命令可以一次完成:
#for homedir in `grep 'home' /etc/passwd |awk -F: '{print $6}'`;do ln -s /home/pub $homedir/pub;done;
我想上次完成任务这么轻松,可这次到命令行一看才觉得有一点紧张了。本来去掉空格用sed就可以,可把文件名传递给sed后sed会去处理文件的内容而不是文件名。还有通过变量传递文件名后,shell就会把空格分成的每一段当成不同的文件来处理,摆弄了半天,终于用下面的命令搞定
export IFS=":";for i in $(ls);do mv $i `echo $i|sed 's// //g'`;done;export IFS=" "
关键指出在于使用了“:”作为分割符,这样shell才不会把文件中的空格断开。