循环遍历文件?grep

循环遍历文件?grep

我有 2 个目录。我将第二个目录中的文件名称保存在临时文件中。如何循环遍历第一个目录中的文件并针对临时文件中的文件进行 grep?

find $2 -type f -name *.c > listafis.txt
for f in listafis.txt
   do
   if grep f $1
   then rm f
   fi
done

这不管用。

答案1

如果你想要循环遍历文件名列表listafis.txt并测试每个文件名是否存在于当前目录中,那么你需要一个文件存在性测试而不是grep循环内的命令,例如

while IFS= read -r f; do
  if [ -f "$1/${f##*/}" ]; then
    echo rm -- "$1/${f##*/}"
  fi
done < listafis.txt

${f##*/}在此处代替 来$f删除任何前导路径组件。如果您创建时listafis.txt不使用前导组件,例如使用

find "$2" -type f -name '*.c' -printf '%f\n' > listafis.txt

(请注意使用引号括起来"$2"以防止单词分裂,并使用 around'*.c'以防止 shell 过早扩展)然后您可以恢复为普通的$f

或者,你可以避免使用中间文件,并使整个过程对任意文件名(包括包含换行符的文件名)都是安全的,使用

while IFS= read -r -d '' f; do
  if [ -f "$1/$f" ]; then
    echo rm -- "$1/$f"
  fi
done < <(find "$2" -type f -name '*.c' -printf '%f\0')

echo一旦您确信它正在做正确的事情,就将其删除。

相关内容