Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将多个具有唯一名称的文件移动到新文件夹并附加到文件名_Linux_Batch Rename_Mv - Fatal编程技术网

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

Linux 将多个具有唯一名称的文件移动到新文件夹并附加到文件名,linux,batch-rename,mv,Linux,Batch Rename,Mv,我在一个文件夹里有大约2000个文件 所有文件的名称中都包含字符串test 我需要做的是将所有这些文件~1250移动到同一目录下名为垃圾桶的文件夹中,并将\u 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/*_

我在一个文件夹里有大约2000个文件

所有文件的名称中都包含字符串
test

我需要做的是将所有这些文件~1250移动到同一目录下名为
垃圾桶
的文件夹中,并将
\u 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
我可以移动所有文件,但是我不知道如何将
\u片段
附加到末尾

由于我必须在许多机器上执行此操作,因此单行程序比小脚本更可取

$ 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 \;
您也可以使用
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 \;

您可以使用
rename
来避免shell for循环。这是一个perl脚本,但它随许多常见发行版(包括Ubuntu 14)一起安装:


您可以使用
rename
来避免shell for循环。这是一个perl脚本,但它随许多常见发行版(包括Ubuntu 14)一起安装:


+1用于使用
find
使流程更干净。+1用于使用
find
使流程更干净。技巧:
mkdir z;mv*;mvz垃圾将所有文件移动到目录中。请注意,如果某些文件以
z
开头,则目录需要命名为
zz
(或
zzz
-目录需要是
*
展开中的最后一项);mv*;mvz垃圾将所有文件移动到目录中。请注意,如果某些文件以
z
开头,则需要将目录命名为
zz
(或
zzz
-目录需要是
*
扩展中的最后一项)。