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

Bash 如何检查shell文件夹中是否存在特定类型的文件?,bash,shell,unix,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文件的情况下发生垃圾$dir部分:)您可以使用测试(1)和&操作符

下面是一个简单的脚本,我用来清理我的电视节目的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文件的情况下发生
垃圾$dir
部分:)

您可以使用
测试(1)
&
操作符。例如: 改变 垃圾$dir 至
[!-e$dir/*.part]&垃圾$dir
这和

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

其中,
[!-e$dir/*.part]
调用
测试(1)
的方式如下:“
$dir
中是否存在(
)以
.part
结尾的文件(
-e
)。如果该文件不存在,则此操作将成功,因此将调用垃圾桶部分。

使用
测试
操作符:

[ -f $dir/*.part ] || trash $dir
(而不是说:
垃圾$dir

仅当目录包含
.part
文件时,这样说才会执行
垃圾$dir


或者,你可以说:

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

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

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

如果在
${dir}
中有多个
.part
文件,这会起作用吗?@umläute你猜怎么着?我猜不会,它不会起作用;e、 g.有两个
.part
-文件将产生[:FOO/BAR.part:二进制运算符expected@umläute很好的猜测。在这种情况下,问题不会出现,因为会有一个.part文件和其他类似.part.00x的文件。因此它只起作用,因为您有一个先验知识,即创建
.part
文件的人将只创建一个。我想最好在e答案(特别是因为OP要求提供一个检查$dir中是否有任何.part文件的解决方案)