Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何根据特定条件删除具有不同扩展名的文件?_Bash_Shell_File - Fatal编程技术网

Bash 如何根据特定条件删除具有不同扩展名的文件?

Bash 如何根据特定条件删除具有不同扩展名的文件?,bash,shell,file,Bash,Shell,File,尽管存在以下问题,但我无法将答案应用于我的问题: 例如,我有很多txt文件,其中有一个同名但扩展名不同的tsv文件 $ ls myDirectory file1.tsv (empty) file1.txt file2.tsv (not empty) file2.txt 只有当tsv文件为空时,我才想删除这两个文件。如果tsv文件不是空的,我想保留这两个文件。像这样: $ ls myDirectory file2.tsv file2.txt 或者,如果并且仅当txt

尽管存在以下问题,但我无法将答案应用于我的问题:

例如,我有很多txt文件,其中有一个同名但扩展名不同的tsv文件

$ ls myDirectory
file1.tsv        (empty)
file1.txt
file2.tsv        (not empty)
file2.txt
只有当tsv文件为空时,我才想删除这两个文件。如果tsv文件不是空的,我想保留这两个文件。像这样:

$ ls myDirectory
file2.tsv
file2.txt
或者,如果并且仅当txt文件中不包含特定字符串时,我想删除两个相应的文件?(以防更简单。)


如何使用shell脚本实现这一点?

在tsv文件上循环。检查是否存在相应的txt文件,如果存在但tsv为空,则将其删除

#/bin/bash
对于*.tsv中的tsv;做
txt=${tsv%.tsv}.txt}对应的txt文件。
[[-f$txt]]| |继续#如果txt不存在,跳过tsv。
如果[!-s$tsv]];然后#如果tsv为空
rm“$tsv”“$txt”#同时删除两个。
fi
完成
替代方案可以以类似的方式实现,只需在if子句中使用不同的条件:

if!grep-q“$search”“$txt”;然后

其中$search包含要搜索的正则表达式。

循环tsv文件。检查是否存在相应的txt文件,如果存在但tsv为空,则将其删除

#/bin/bash
对于*.tsv中的tsv;做
txt=${tsv%.tsv}.txt}对应的txt文件。
[[-f$txt]]| |继续#如果txt不存在,跳过tsv。
如果[!-s$tsv]];然后#如果tsv为空
rm“$tsv”“$txt”#同时删除两个。
fi
完成
替代方案可以以类似的方式实现,只需在if子句中使用不同的条件:

if!grep-q“$search”“$txt”;然后
其中$search包含要搜索的正则表达式