Вы, кажется, перепутали несколько вещей.
set today = 'date +%Y'
выглядит как синтаксис tcsh, но даже в tcsh он присваивает строку date +%Y
переменной today
, он не запускает date
команду. Поскольку вы, вероятно, используете bash или какую-либо другую оболочку POSIX, синтаксис присваивания today=some_value
(без пробелов вокруг знака равенства). Чтобы запустить команду и назначить ее вывод переменной, используйте подстановку команды :
today=$(date +%Y-%m-%d)
(Я также завершил спецификацию даты). Вы можете использовать обратные кавычки вместо долларовых скобок, но это может привести к тому, что они будут визуально перепутаны с прямыми кавычками, а правила, когда вам нужны кавычки внутри команды с обратными кавычками, довольно сложны и зависят от реализации, поэтому лучше не придерживаться $(…)
(что имеет тот же эффект с более разумным синтаксисом).
Вы использовали &
в конце несколько команд. Это заставляет команду выполняться в фоновом режиме, что здесь не нужно. Я подозреваю, что вы имели в виду &&
, что означает выполнение следующей команды, только если первая команда прошла успешно.
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
от времени последнего чтения файла (если ваша система отслеживает это, а если нет, то время может быть уже как время изменения).
:
потому что тогда она будет считываться как хост в rsync и scp. stackoverflow.com/a/37143274/390066