我有一个目录(用于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" )"' '{}' \;
非常感谢任何帮助! 谢谢, 井架
答案 0 :(得分:0)
好吧,我无法完全按照自己的意愿完成这项任务,但我找到了一项可以完成工作的工作。
我在Endnote中打印了所有PDF的列表,然后删除了路径名,只留下了文件名(在文本管理器中查找和替换功能)。然后我使用find命令在我的计算机上搜索此列表,打印每个PDF的所有出现。
然后在文本管理器中,我删除了包含我的尾注PDF的初始路径的所有行,只留下所需的重复项。
接下来,我使用find命令搜索这些确切的路径并将它们移动到新文件夹。
总而言之,我完全按照原始帖子中的相同命令,以及文本管理员的一点帮助。不幸的是,我从来没有弄清楚如何将所有我想要的步骤组合成一个unix命令。