如何编写将用作cron作业的mv命令

时间:2019-05-02 02:53:24

标签: bash mv

我正在运行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/'

我的理解是*是问题所在,但是在文件路径上使用'或'似乎并不能像我发现的那样解决该问题。

关于如何使其正常工作的任何想法?

2 个答案:

答案 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