我正在运行Centos7。我需要执行一项cron作业,以将/ grab和Transcode文件夹之外的所有内容从/ media / tmp移至/ media / tv。昨天我认为以下操作有效,但今天它也移动了Transcode文件夹。
mv -n /media/tmp/*!(Transcode)!(.grab) /media/tv/
我发现以上内容不能作为cron作业,因为'('原因和错误。我了解到我需要对这些内容进行转义,但现在我明白了
mv: cannot stat ‘/media/tmp/!(Transcode)!(.grab)’: No such file or directory
我当前对bash脚本的尝试是
#!/bin/bash
mv -n '/media/tmp'/*!\(Transcode\)!\(.grab\) '/media/tv/'
我的理解是*是问题所在,但是在文件路径上使用'或'似乎并不能像我发现的那样解决该问题。
关于如何使其正常工作的任何想法?
答案 0 :(得分:1)
我只是想像(未试过)这样简单的事情做
:mkdir -p /media/tv || exit 1
for i in /media/tmp/*; do
case $(basename "$i") in
Transcode|.grab ) ;;
* ) mv -n -- "$i" /media/tv ;;
esac
done
答案 1 :(得分:1)
您正在尝试使用extglob,它可能未启用cron。我会完全避免使用该选项,而是使用负!
正则表达式匹配来遍历全局。
for file in /media/tmp/*; do
[[ ! "$file" =~ Transcode|\.grab$ ]] && mv -n "$file" /media/tv/
done