2013-10-21 120 views
0

这里有一个简单的脚本,我用它来清理Torrent下载我的电视节目:如何检查文件夹中是否存在特定种类的文件?

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

如何我如果检查语句if $目录中有任何文件。第二部分修改呢?我显然只想在没有.part文件的情况下发生trash $dir部分:)

回答

1

使用test操作:

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

(而不是说:trash $dir

这么说的话将执行trash $dir只有在目录中包含.part文件。


或者,你可以说:

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

如果'$ {dir}'中有多个'.part'文件,这个工作会怎么样? –

+0

@umläute你的猜测是什么? – devnull

+1

我的猜测是*不,它不会工作*;例如有两个'.part'-文件将产生* [:FOO/BAR.part:预期的二元运算符* –

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)文件中.part结束在$dir。如果这样的文件不存在,则成功并因此调用垃圾部分。

1

如果你需要检查是否有一个或多个文件匹配给定模式的解决方案,你可能会使用更幸运:

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