将具有唯一名称的多个文件移动到新文件夹并附加到文件名

时间:2014-11-07 03:04:15

标签: linux batch-rename mv

我在一个文件夹中有大约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追加到最后。

由于我必须在许多机器上执行此操作,因此只需使用一个内衬就可以使用一个内衬。

2 个答案:

答案 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