Wygląda na to, że pomieszałeś kilka rzeczy.
set today = 'date +%Y'
wygląda na składnię tcsh, ale nawet w tcsh przypisuje ciąg date +%Y
do zmiennej today
, nie uruchamia date
polecenia. Ponieważ prawdopodobnie używasz bash lub innej powłoki POSIX, składnia przypisania jest następująca today=some_value
(bez spacji wokół znaku równości). Aby uruchomić polecenie i przypisać dane wyjściowe do zmiennej, użyj podstawienia polecenia :
today=$(date +%Y-%m-%d)
(Skończyłem także specyfikację daty). Możesz używać cudzysłowów zamiast nawiasów dolarowych, ale jest podatny na mylące wizualnie z cudzysłowami do przodu, a zasady, kiedy potrzebujesz cudzysłowów wewnątrz polecenia z cudzysłowem, są dość złożone i zależą od implementacji, więc lepiej nie trzymać się $(…)
( ma taki sam efekt ze składnią sanera).
Użyłeś &
na końcu kilku poleceń. To powoduje, że polecenie wykonuje się w tle, co nie jest tutaj potrzebne. Podejrzewam, że miałeś na myśli &&
, co oznacza wykonanie następnego polecenia tylko wtedy, gdy pierwsze polecenie się powiedzie.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Alternatywą do używania &&
po każdym poleceniu jest uruchomienie skryptu set -e
. To mówi powłoce, aby przestała wykonywać skrypt, gdy tylko dowolne polecenie zwróci niezerowy status (z wyjątkiem poleceń w if
warunkach i kilku innych przypadkach).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Twoje find
polecenie jest w porządku, ale prawdopodobnie nie robi tego, co zamierzasz (chociaż nie wiem na pewno, co to jest).
Tworzysz katalog za pomocą, mkdir
a następnie od razu go przeglądasz find
. To nie będzie przydatne, dopóki katalog już nie istnieje. Czy chodziło Ci o utworzenie katalogu dla dzisiejszych dzienników i przeniesienie ostatnich plików The_Logs
do katalogu o nazwie np. The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
A może chciałeś zmienić nazwę dzisiejszych plików dziennika, aby dodać przyrostek $today
? Wymaga to obliczenia innej nazwy pliku dla każdego pliku do przeniesienia.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Zauważ, że użyłem -mtime
, aby przenieść pliki na podstawie ich czasu modyfikacji, a nie -atime
, czyli czasu ostatniego odczytu pliku (jeśli twój system to śledzi - jeśli nie, atime może być tak daleko jak mtime).
:
ponieważ wtedy będzie ona czytana jako host w rsync i scp. stackoverflow.com/a/37143274/390066