Как написать команду mv, которая будет работать как cron - PullRequest
1 голос
/ 02 мая 2019

Я использую Centos 7. Мне нужно иметь задание cron, которое перемещает все из / media / tmp в / media / tv, кроме папок .grab и Transcode. Вчера я думал, что работает следующее, но сегодня он также перемещает папку 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 ]

1 голос
/ 02 мая 2019

Вы пытаетесь использовать extglob , который не может быть включен для cron.Я бы полностью избежал этого, перебирая глобус с отрицательным ! регулярным выражением.

for file in /media/tmp/*; do
  [[ ! "$file" =~ Transcode|\.grab$ ]] && mv -n "$file" /media/tv/
done
1 голос
/ 02 мая 2019

Я бы просто сделал это как-то просто (не проверено):

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
...