使用 shell 脚本需要文本文件中每一行的绝对路径

使用 shell 脚本需要文本文件中每一行的绝对路径

我有一个包含 .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

相关内容