如何检查shell中的文件夹中是否存在特定类型的文件?

时间:2013-10-21 09:08:13

标签: bash shell unix

这是一个简单的脚本,用于清理我的电视节目的torrent下载:

find . ! -path . -type d -maxdepth 3 -mindepth 3 -exec sh -c '
dir="$0"
tvnamer --batch $dir
mv $dir/*.mkv $dir/..
trash $dir
' {} ';'

如何使用if语句修改它以检查$ dir中是否包含任何.part文件?我显然只希望在没有.part文件时发生trash $dir部分:)

3 个答案:

答案 0 :(得分:1)

使用test运算符:

[ -f $dir/*.part ] || trash $dir

(而不是说:trash $dir

只有当目录包含trash $dir个文件时,才会执行.part


或者,您可以说:

[[ "$(ls $dir/*.part)" =~ \.part$ ]] 2>/dev/null || trash $dir

答案 1 :(得分:1)

如果您需要一个解决方案来检查是否有一个或更多文件与给定模式匹配,那么您可能会有更多运气:

ls "${dir}"/*.part >/dev/null 2>&1 || trash "${dir}"

答案 2 :(得分:0)

您可以使用test(1)&&运算符。例如: 更改     trash $dir to     [ ! -e $dir/*.part ] && trash $dir

相同
if [ ! -e $dir/*.part ]; then
  trash $dir
fi

其中[ ! -e $dir/*.part ]以下列方式调用test(1):'测试是否存在!)(-e)文件以{{1}结尾在.part中。如果这样的文件不存在,则成功,因此调用垃圾部分。