带有嵌套if语句的循环的命令行



我需要循环浏览同一目录中的所有文件,并在其中指定一行"文件需要删除";存在于该目录中的任何文件中,请仅删除这些文件。请问在命令行中它是如何工作的?

例如,该目录包含1000个文件的file1、file2、file3等等。每个文件有10000行字符串。如果任何文件包含字符串"0";"需要删除文件";,删除那些文件,但不要删除不包含该字符串的文件。

我正沿着的路线前进

for each file the directory; do
if [ row text == "File needs to be deleted" ]; then
delete file
fi
done
grep -d skip -lF 'File needs to be deleted' file* | xargs echo rm --

如果当前目录中只有文件,没有目录,则可以删除-d skip。如果您的grep版本没有-d,但您的目录确实包含子目录,则:

find . -maxdepth 1 -type f -exec grep -lF 'File needs to be deleted' {} + | xargs echo rm --

一旦测试完成并很高兴它将删除您期望的文件,就删除echo

简单的bash示例:

#!/bin/bash
# Get the running script name
running_script=$(realpath $0 | awk -F '/' '{ print $NF }')
# Loop throw all files in the current directory
for file in *; do
# If the filename is the same as the running script pass it.
[ "$file" == "$running_script" ] && continue
# If "File needs to be deleted" exists in the file delete the file.
grep -q "File needs to be deleted" "$file" && rm "$file"
done

相关内容

  • 没有找到相关文章

最新更新