我在一个目录中有 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