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 语句修改它以检查 $dir 中是否有任何 .part 文件?我显然只希望在trash $dir没有 .part 文件时发生该部分:)

4

3 回答 3

1

使用test运算符:

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

(而不是说trash $dir:)

trash $dir仅当目录包含.part文件时才会执行此操作。


或者,您可以说:

[[ "$(ls $dir/*.part)" =~ \.part$ ]] 2>/dev/null || trash $dir
于 2013-10-21T09:21:13.620 回答
1

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

ls "${dir}"/*.part >/dev/null 2>&1 || trash "${dir}"
于 2013-10-21T10:21:22.497 回答
0

您可以使用test(1)&&运算符。例如: Change trash $dir to [ ! -e $dir/*.part ] && trash $dir which is the same as

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

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

于 2013-10-21T09:21:10.253 回答