![将多个文件从文件名列表移动到新文件夹](https://linux22.com/image/1388604/%E5%B0%86%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E4%BB%8E%E6%96%87%E4%BB%B6%E5%90%8D%E5%88%97%E8%A1%A8%E7%A7%BB%E5%8A%A8%E5%88%B0%E6%96%B0%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我在 list.txt 中有一个文件名列表,其中包含“abc1.png、abc2.png、abc3.png...”。
但是,我不知道文件位于哪个目录。
我想找到txt文件中的所有文件,并将它们移动到新文件夹中。
答案1
你需要逐行读取每个文件名,然后尝试find
使用该name
选项,最后将mv
其达到目标:
while IFS= read -r filename; do
find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt
将{}
被替换为找到的文件路径。
答案2
假设您的文件名不包含“,”或换行符,并且每个文件在 list.txt 中仅存在一次。您还必须将 newdirectory 更改为您想要的目录。如果 list.txt 中缺少任何文件,则不会复制该文件(并且不会提供任何信息)。
sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;
答案3
使用一些 bash 很容易做到这一点:
首先使用 find 查找文件并将输出重定向到另一个文件中:
对于 $(cat list.txt) 中的 arg;执行 find / -name $arg -print >> files_with_path.txt;完成
然后 mv 文件:
对于 $(cat files_with_path.txt) 中的 arg;执行 mv $arg /your/dest/folder;完成