“/usr/bin/stat: Список аргументов слишком долго” ошибка

изменение "sda5_crypt" crypttab согласно предложению ниже:

Замена OLD_NAME с NEW_NAME в /etc/crypttab, и затем:

# dmsetup rename OLD_NAME NEW_NAME
# update-initramfs -c -t -k all
# update-grub
# reboot
5
21.11.2018, 23:03
4 ответа

ls -lh *.log *.lst logfolder | grep year | grep month

0
27.01.2020, 20:37

Я бы сделал так:

find "$logfolder" \( -name '*.log' -o -name '*lst' \) -printf "%TB\t%TY\t%p\n" |
     awk '$1==m && $2==y' m="$month" y="$year" | cut -f 3- 

Объяснение

Сгруппировав в круглых скобках два вызова -имени, вы можете объединить их с флагом -o (или). Это заставит найти файлы .log или .lst. Флаг -printf (расширение GNU) печатает месяц модификации файла (%TB), затем год его модификации (%TY), а затем путь к нему (%p), с закладкой (\t) между каждым полем.

awk просто проверяет, что 1-е поле (месяц) совпадает с $month, а второе - с $year.

Срезка cut удаляет первые два поля (месяц и год) и печатает все из 3-го поля дальше.

Я проверил это, создав файлы, измененные в декабре 2012 года (и установил $month на "December" и $year на 2012 год):

$ touch -d "December 13 2012" {a,b,c}{.lst,.log}
$ touch c.lst a.log ## c.lst and a.log now have today's modification date.
$ find $logfolder \( -name '*.log' -o -name '*lst' \) -printf "%TB\t%TY\t%p\n" |
  awk '$1==m && $2==y' m="$month" y="$year" | cut -f 3-
./b.log
./c.log
./b.lst
./a.lst

(обратите внимание, что предполагается, что имена файлов и каталогов не содержат символов новой строки).

.
3
27.01.2020, 20:37

Попробуйте следующее:

find $logfolder -type f -exec stat --format='%y %n' "{}" + |
  grep "$year-$month-"|
  awk -F' ' '{print $4}'|
  grep 'log$\|lst$' > $archivepath/filesToArchive
1
27.01.2020, 20:37

Для забавной возможности, если ваш найдет ручки -newerXY , используйте его! Например, чтобы получить файлы с 1977 года и октября:

find "$logfolder" \( -name '*.log' -o -name '*.lst' \) -newermt "1977-10-01" \! -newermt "1977-10-01 +1 month"

Готово!

Так как у вас уже есть переменные год и месяц , то просто записать как:

find "$logfolder" \( -name '*.log' -o -name '*.lst' \) -newermt "$year-$month-01" \! -newermt "$year-$month-01 +1 month"

Только одну найти команду! Удивительно!

3
27.01.2020, 20:37

Теги

Похожие вопросы