Unix从文本文件列表中查找pdf文件

时间:2014-01-03 01:52:38

标签: unix find move

我有一个目录(用于Endnote),其中填充了PDF文件(1000个)。我用Unix打印了所有pdf文件的列表,并将此列表保存为文本文件。大多数这些pdf文件都位于我的计算机的其他目录中(重复)。

现在,我想使用find命令在我的计算机的其余部分中搜索这些pdf文件的副本,如果找到重复项,请将其移动到新目录。如果多次找到特定的文件名,我想给每个文件名一个唯一的名称(即basename.pdf.1,basename.pdf.2等)。最后,我希望所有重复项都有一个目录,以便我可以仔细检查它们然后删除。)

但是,我不希望找到搜索我的列表或我的Dropbox的目录,因为我不想移动这些pdf文件(只移动分散在我的计算机中的其他pdf文件)。

我发现(我认为)如何完成完成此任务所需的所有步骤,但我似乎无法将所有内容整合到一个正常的Unix命令中。

1)为了在排除目录时查找文件:

find -name "what to search for" -not -path "excluded_directory"

find build -not \( -path excluded_directory1 -prune \) -not \( -path excluded_directory2 -prune \) -name \*.what_to_find

或我目前最喜欢的

find . -name '*.what_to_find' | grep -v exludeddir1 | grep -v excludeddir2

2)为了将文本文件读入查找并将这些行用作搜索模式:

find . type f -print | fgrep -f file_list.txt

3)查找和移动文件

find / -iname "*.what_to_find" -type f -exec mv {} /new_directory \;

find / -iname "*.what_to_find" -type f | xargs -I '{}' /new_directory

或(重命名文件使得具有相同名称的文件不会被彼此覆盖)。我还没有完全理解这个命令中发生的一切......

find -name '*.what_to_find' -type f -exec bash -c 'mv -v "$0" "./$( mktemp "$( basename "$0" ).XXX" )"' '{}' \;

所以,我可以单独执行这些命令,但是无法让它们按需要一起工作(也许我的命令顺序错了?其他问题?)。

find . type f -print | fgrep -f file_list.txt | grep -v excludeddir1 | grep -v excludeddir2 -exec bash -c 'echo mv -v "$0" "./$( mktemp "$( basename "$0" ).XXX" )"' '{}' \;

非常感谢任何帮助! 谢谢, 井架

1 个答案:

答案 0 :(得分:0)

好吧,我无法完全按照自己的意愿完成这项任务,但我找到了一项可以完成工作的工作。

我在Endnote中打印了所有PDF的列表,然后删除了路径名,只留下了文件名(在文本管理器中查找和替换功能)。然后我使用find命令在我的计算机上搜索此列表,打印每个PDF的所有出现。

然后在文本管理器中,我删除了包含我的尾注PDF的初始路径的所有行,只留下所需的重复项。

接下来,我使用find命令搜索这些确切的路径并将它们移动到新文件夹。

总而言之,我完全按照原始帖子中的相同命令,以及文本管理员的一点帮助。不幸的是,我从来没有弄清楚如何将所有我想要的步骤组合成一个unix命令。