Linux:递归地查找字典中的文件列表

时间:2011-05-30 18:44:46

标签: linux list shell recursion find


我有一个文本文件,每行有一个文件名:

Interpret 1 - Song 1.mp3
Interpret 2 - Song 2.mp3
...   

(约200个文件名)

现在我想为这个文件名重新搜索一个文件夹,以获取Filenames.txt中每个文件名的完整路径。
这该怎么做? :)

(目的:将文件复制到我的MP3播放器,但其中一些已损坏,我想重新复制它们,而无需花费数小时研究它们的音乐文件夹)

4 个答案:

答案 0 :(得分:4)

最简单的方法可能如下:

cat orig_filenames.txt | while read file ; do find /dest/directory -name "$file" ; done > output_file_with_paths 

答案 1 :(得分:3)

更快的方法是只运行一次find命令并使用fgrep。

find . -type f -print0 | fgrep -zFf ./file_with_filenames.txt | xargs -0 -J % cp % /path/to/destdir

答案 2 :(得分:1)

您可以使用while读取循环和find

<强> filecopy.sh

#!/bin/bash

while read line
do
        find . -iname "$line" -exec cp '{}' /where/to/put/your/files \;
done < list_of_files.txt

其中list_of_files.txt是逐行文件列表,/where/to/put/your/files是您要复制到的位置。你可以在目录中运行它:

$ bash filecopy.sh

答案 3 :(得分:0)

+1 @ jm666答案,但是-J选项对我的xargs风格不起作用,所以我把它变成了:

find . -type f -print0 | fgrep -zFf ./file_with_filenames.txt | xargs -0 -I{} cp "{}" /path/to/destdir/