Ви ніби змішали кілька речей.
set today = 'date +%Y'
виглядає як синтаксис tcsh, але навіть у tcsh він призначає рядок date +%Y
змінній today
, вона не виконує date
команду. Оскільки ви, ймовірно, використовуєте bash або іншу оболонку POSIX, синтаксис призначення є today=some_value
(без пробілів навколо знака рівності). Щоб запустити команду та призначити її вихід змінній, використовуйте підстановку команди :
today=$(date +%Y-%m-%d)
(Я також завершив специфікацію дати). Ви можете використовувати зворотні котирування замість дужок долара, але це схильне до того, щоб візуально плутати з котируваннями вперед, а правила, коли вам потрібні лапки всередині команди, що коментується, досить складні і залежать від реалізації, тому краще не дотримуватися $(…)
(які має той самий ефект із синтаксисом saner).
Ви використовували &
в кінці кілька команд. Це змушує команду виконуватись у фоновому режимі, чого тут не потрібно. Я підозрюю, що ви мали на увазі &&
, що означає виконати наступну команду, лише якщо перша команда вдалася.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Альтернативою для використання &&
після кожної команди є запуск сценарію set -e
. Це сповіщає оболонку припинити виконання сценарію, як тільки будь-яка команда поверне ненульовий статус (за винятком команд в if
умовах та кількох інших випадках).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Ваша find
команда в порядку, але, ймовірно, не робить того, що ви маєте намір робити (хоча я точно не знаю, що це таке).
Ви створюєте каталог із, mkdir
а потім негайно переходите до нього find
. Це не буде корисно, якщо каталог вже не існує. Ви мали на увазі створити каталог для журналів сьогодні та перемістити останні файли з The_Logs
каталогу, наприклад The_Logs.2012-02-11
,?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
Або ви мали намір перейменувати сьогоднішні файли журналу, щоб додати суфікс $today
? Для цього потрібно обчислити різну назву файлу для кожного файлу для переміщення.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Зауважте, що я використовував -mtime
для переміщення файлів на основі часу їх модифікації, а не -atime
в цей час, коли файл останній раз читався (якщо ваша система це відслідковує - якщо цього не відбувається, atime може бути назад, як mtime).
:
оскільки тоді вона буде прочитана як хост у rsync та scp. stackoverflow.com/a/37143274/390066