有条件地将文件移动到新目录

有条件地将文件移动到新目录

我在一个目录中有 100 个文件,我只想保留第一个文件的一部分与另一个文件匹配的文件,并且如果不满足条件,则 mv 所有没有相应文件的文件,例如我有:

 man_xyz_1.txt 
 sig_xyz_1.txt 
 man_abc_1.txt 
 man_ttc_1.txt
 man_ddd_1.txt
 sig_ddd_1.txt

在这里,我想只保留前两个文件(man_xyz_1.txt and sig_xyz_1.txt; man_ddd_1.txt and sig_ddd_1.txt),因为它们的文件名()部分*_xyz_1.txt and *_ddd_1.txt是匹配的,而想要 mv(man_abc_1.txt and man_ttc_1.txt) 到另一个目录,因为它们没有带有前缀的相应文件sig_*。欢迎任何帮助。谢谢,

答案1

这会执行对面的,即查看man_*.txt当前目录中的所有文件,并将所有可以与相应sig_文件配对的文件移动到processed目录中。然后,您可以将剩余的文件移动到需要存储的位置。

mkdir processed || exit
for name in man_*.txt; do
    if [ -e "sig_${name#man_}" ]; then
        mv "$name" "sig_${name#man_}" processed
    fi
done

参数替换${name#man_}扩展为 的值$name并删除其man_前缀字符串。

请注意,这假设该processed目录不存在。

测试:

$ tree
.
|-- man_abc_1.txt
|-- man_ddd_1.txt
|-- man_ttc_1.txt
|-- man_xyz_1.txt
|-- script
|-- sig_ddd_1.txt
`-- sig_xyz_1.txt

1 directory, 7 files
$ sh script
$ tree
.
|-- man_abc_1.txt
|-- man_ttc_1.txt
|-- processed
|   |-- man_ddd_1.txt
|   |-- man_xyz_1.txt
|   |-- sig_ddd_1.txt
|   `-- sig_xyz_1.txt
`-- script

2 directories, 7 files

相关内容