![使用 shell 脚本需要文本文件中每一行的绝对路径](https://linux22.com/image/10275/%E4%BD%BF%E7%94%A8%20shell%20%E8%84%9A%E6%9C%AC%E9%9C%80%E8%A6%81%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E6%AF%8F%E4%B8%80%E8%A1%8C%E7%9A%84%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84.png)
我有一个包含 .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