我有一个包含文件名的列表文件,我想一次从列表中读取一个文件名,并在具有多个子文件夹的目录结构下查找它,然后找到后将其移动到 diff 文件夹中。
前任:
listfile.txt
Content of the file--
filename1.txt
filename2.txt
maindir
|--subdir1
|---subdir2/filename1.txt
|---subdir3/filename2.txt
从 listfile.txt 中一一读取文件名并将它们移动到 diff 文件夹(例如 /destfolder)。
任何建议都会很棒。
谢谢,卡文
答案1
使用 shell 循环并find
为每个文件名调用一次:
mkdir -p archive_dir
while IFS= read -r filename; do
find maindir -type f -name "$filename" -exec mv {} archive_dir ';'
done <listfile.txt
这会稍微低效,因为即使在找到文件后它也会继续寻找匹配的文件名(如果它找到另一个文件,它会覆盖已经移动的那个)。
如果使用 GNU find
,您可以添加到命令-quit
的最后find
,以使find
进程在移动第一个文件后停止。
显示它的工作原理:
$ cat listfile.txt
filename1.txt
filename2.txt
.
|-- listfile.txt
`-- maindir
|-- subdir1
|-- subdir2
| `-- filename1.txt
`-- subdir3
`-- filename2.txt
4 directories, 3 files
(运行上面的循环)
然后:
.
|-- archive_dir
| |-- filename1.txt
| `-- filename2.txt
|-- listfile.txt
`-- maindir
|-- subdir1
|-- subdir2
`-- subdir3
5 directories, 3 files
有关的: