我有一个包含 .XML 文件列表的文本文件。
我需要文件中每个 XML 的绝对路径。
尝试了以下 shell 脚本,但经过多次尝试后,find 命令在 do 标签内不起作用。
#!/bin/sh
NAMES=`cat list2.txt`
for NAME in $NAMES;
do
echo "$NAME"
find $PWD -type f -name "$NAME"
done
答案1
循环是解决问题的错误方法。为每个文件爬行目录树的效率很低。您只想对目录进行一次爬网以归档所有文件。就像:
find "$PWD" -type f -print0 | awk -F / '
!list_processed {names[$0]; next}
$NF in names' list.txt RS='\0' list_processed=1 -
假设list.txt
包含一个文件名列表(而不是路径),每行一个。
答案2
您的代码有错误,您的迭代是错误的。
我会在迭代中使用这种方式:
#!/bin/sh
while IFS= read -r NAME; do
echo "$NAME"
find "$PWD" -type f -name "$NAME"
done <list.txt
答案3
变量PWD
未定义
在循环开始之前添加
PWD=<path>
答案4
感谢您的所有回复。
问题已解决。 :)
我传递的文本文件可能存在一些问题,我刚刚创建了新的文本文件并将所有数据复制到其中。
在 for 循环中传递这个新文件与我的代码本身配合得很好,如下所示:
#!/bin/sh
NAMES=`cat myNewList.txt`
for NAME in $NAMES;
do
find $PWD -type f -name "$NAME"
done