如何在linux上使用空格移动多个文件

时间:2013-07-02 03:46:31

标签: linux xargs mv

您好我是Linux的新手,我要问的是使用awk和xargs在linux上移动文件,如果我重新发布,请道歉..

我有这样的apprx 1000-5000文件:

-rw-rw-r-- 1 wm files 77641 Mar 3 11:20 sendOrder.ZBAM.0005167032-20130503 11:20:35.txt
-rw-rw-r-- 1 wm files 77647 Apr 3 11:20 sendOrder.ZBAM.0005167033-20130503 11:20:36.txt
-rw-rw-r-- 1 wm files 77655 5月3日11:20 sendOrder.ZBAM.0005167034-20130503 11:20:37.txt
-rw-rw-r-- 1 wm files 77661 5月3日11:20 sendOrder.ZBAM.0005167035-20130503 11:20:38.txt
-rw-rw-r-- 1 wm files 77556 5月3日11:20 sendOrder.ZBAM.0005167036-20130503 11:20:39.txt
-rw-rw-r-- 1 wm files 77549 5月3日11:20 sendOrder.ZBAM.0005167037-20130503 11:20:40.txt
-rw-rw-r-- 1 wm files 77549 Jun 3 11:20 sendOrder.ZBAM.0005167038-20130503 11:20:41.txt
-rw-rw-r-- 1 wm files 77543 Jun 3 11:20 sendOrder.ZBAM.0005167039-20130503 11:20:42.txt

如您所见,文件名包含空格,位于-20130503 11:20:42.txt,所以我正在使用:

第1步

ls -la|grep -e "May"|awk "{print $9, $10}" > some.files


在步骤1中,我已经获得了列表文件,我希望在some.files中显示“May”月份

第2步

xargs -0 some.files mv -t dir/newdir/

第2步不起作用..我该怎么办?我正在使用Linux CentOS 5.3

2 个答案:

答案 0 :(得分:1)

可能有400种方法可以做到这一点。使用find可能是更有效的方法,但是:

您可以使用for循环:

for i in `ls`; do mv $i dir/newdir/; done

或者使用您在步骤1中创建的文件的while循环:

ls -la|grep -e "May"|awk "{print $9, $10}" > some.files; cat some.files | while read mFILE; do mv $mFILE dir/newdir; done

或者使用find(其中+30大于X天):

find ./ -mtime +30 -exec mv dir/newdir {} \;

或者,如果你想使用awk和xargs:

ls -la|grep -e "May"|awk "{print $9, $10}" | xargs mv dir/newdir/

答案 1 :(得分:0)

使用GNU Parallel,您可以:

 ls | parallel -X mv {} dir/newdir/

10秒安装:

wget -O - pi.dk/3 | sh

了解详情:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1