我在不同的子目录中有一堆不同名称的文件。我用这些名称创建了一个txt文件,但我无法使用该文件使find
工作。我看到过关于创建列表的问题、关于不使用find
的帖子(但不理解原因(。建议?我很难想出一个例子,因为我不知道如何重现目录结构。以下是文件的名称(以防出现格式化问题(
AO-169
AO-170
AO-171
我想到的最好的是:
cat ExtendedList.txt | xargs -I {} find . -name {}
很明显,它在找到的第一个目录中就死了。
我也试过
ta="AO-169 AO-170 AO-171"
find . -name $ta
但它抱怨find: AO-170: unknown primary or operator
如果您试图询问"如何在当前目录的子目录中找到具有这些名称中任何一个的文件";,答案看起来像
xargs printf -- '-o -name %s ' <ExtendedList.txt |
xargs -r0 find . -false
-false
只是一种让实际谓词列表以"…"开头的可爱方式;。。。或";。
如果ExtendedList.txt
中的名称列表很大,那么如果第二个xargs
决定在-o
和-name
之间拆分它,则这可能会失败。
选项-0
是不可移植的,但应该可以在Linux或任何有GNUxargs
的地方使用。
如果你能保证ExtendedList.txt
中的字符串列表不包含任何对shell有问题的字符(比如单引号(,你可以简单地说
sed "s/.*/-o -name '&'/" ExtendedList.txt |
xargs -r find . -false