我正在尝试将不同目录中具有不同名称的多个文件复制到同一个新目录。目录的名称与每个文件名的开头相同。例如从目录/mnt/data/files/xyz
,我想将文件复制xyz_5
到目录/mnt/data/myname/new
。从目录中/mnt/data/files/abc
,我想将文件复制abc_7
到目录/mnt/data/myname/new
。
我有 60 个文件需要执行此操作。我现在应该做什么:
cd /mnt/data/files/xyz;
cp -v *_5 /mnt/data/myname/new
我对每个文件都这样做。但我可以用一段代码来做到这一点吗?
答案1
问题不是很清楚,但可能你只是想做
cp -v /mnt/data/files/xyz/*_5 /mnt/data/files/abc/*_7 /mnt/data/myname/new/
答案2
一个简单的 for 循环就可以完成这项工作:
for i in /mnt/data/files/*; do
[ -d "$i" ] && cp -v "${i}/${i}_5" /mnt/data/myname/new/
done
for 循环遍历目录的内容/mnt/data/files/
。在循环内部[ -d "$i" ]
检查该项目是否是一个目录。如果是,则将该目录下同名、以 结尾的文件复制_5
到目标目录中/mnt/data/myname/new/
。