我在一个文件夹中有大约2000个文件。
所有文件都包含名称中的字符串test
。
我需要做的是将所有这些文件~1250移动到同一目录中名为trash
的文件夹中,并将_scrap
附加到每个文件的末尾。
mv *test* trash/
我想要的是这样的:
[root@server] ls
test1.txt test2.txt test3.txt trash video1.txt video2.txt video3.txt
[root@server] mv *test* trash/*_scrap
[root@server] ls
trash vidoe1.txt video2.txt video3.txt
[root@server] ls trash/
test1.txt_scrap test2.txt_scrap test3.txt_scrap
我可以移动所有文件,但是我无法弄清楚如何将_scrap
追加到最后。
由于我必须在许多机器上执行此操作,因此只需使用一个内衬就可以使用一个内衬。
答案 0 :(得分:3)
$ touch test1.txt test2.txt test3.txt vidoe1.txt vidoe2.txt vidoe3.txt
$ mkdir trash
$ for file in *test*; do mv "$file" "trash/${file}_scrap"; done
$ ls
trash vidoe1.txt vidoe2.txt vidoe3.txt
$ ls trash
test1.txt_scrap test2.txt_scrap test3.txt_scrap
$
您也可以使用xargs
$ ls *test* | xargs -t -I{} mv {} trash/{}_scrap
mv test1.txt trash/test1.txt_scrap
mv test2.txt trash/test2.txt_scrap
mv test3.txt trash/test3.txt_scrap
$
您可以使用find
$ find . -name '*test*' -maxdepth 1 -exec mv {} trash/{}_scrap \;
答案 1 :(得分:2)
您可以使用rename
来避免shell for循环。它是一个perl脚本,但它安装了许多常见的发行版(包括Ubuntu 14):
$ mv *test* trash/
$ rename 's/$/_scrap/g' trash/*
$ ls trash/
test1.txt_scrap test3.txt_scrap test2.txt_scrap