0

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

我有大约 1000-5000 个这样的文件:

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

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

STEP 1

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


在第 1 步中,我已经在 some.files 中获得了我想按“5 月”月份移动的列表文件 第

2步

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

第 2 步行不通。我该怎么办?我正在使用 Linux CentOS 5.3

4

2 回答 2

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/
于 2013-07-02T06:48:16.730 回答
0

使用 GNU Parallel,您可以:

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

10秒安装:

wget -O - pi.dk/3 | sh

了解更多:https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

于 2013-07-04T18:12:57.637 回答