我有 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
一旦您确信它正在做正确的事情,就将其删除。