给定一个带有文件名的文本文件,如何在当前目录的子目录中找到文件



我在不同的子目录中有一堆不同名称的文件。我用这些名称创建了一个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

最新更新