Удалить каталоги от Linux 2010 года в Linux


1

Я хочу использовать следующую команду для удаления каталогов только от января 2010

ls -lh | awk '{print $6 " " $9}' | sed -n '/Jan/p' | awk '{print $2}' >>/tmp/file_list

Приведенная выше команда выведет список всех каталогов, датированных январем, но в моем списке есть январь 2010 и январь 2011

Может кто-нибудь может помочь мне с командой SED перечислить только дату каталогов Январь 2010?


find специально создан для решения подобных проблем. Потратьте время, чтобы освоить его, это делает такие проблемы, как этот шов тривиальным.
nelaaro

Ответы:


1

Вы можете использовать grep вместо awk / sed, может быть что-то вроде этого?

ls -lh | grep -o 'Jan [ 1-2][0-9]  2010 .*$' | awk '{print $4}' >> /tmp/file_list

Проблема в том, что у вас есть первый awk, не включает годы, поэтому 2011 (или 2009, 2008 и т. Д.) Все отображаются в списке, который отправляется в sed.


спасибо за ваш ответ, я получил список каталогов, но есть ли способ напечатать дату в выходном файле?
AlBouazizi

Если вам нужны дата и файл, вы можете избавиться от последнего awk (который печатает только файл). Без последнего awk вы получите: «Jan», затем дату, затем «2010», затем имя файла.
Джон Лин

2

Никогда не пытайтесь анализировать выходные данные lsдля чего-либо, кроме целей отображения - это плохая идея .

Хотя он использует find и xargs вместо sed, возможно, что-то подобное сработает. Обратите внимание, что это не проверено.

jan01="$(date -d '20100101 00:00' +%s)"
feb01="$(date -d '20100201 00:00' +%s)"

today="$(date -d '23:59:59' +%s)"

daysecs="$((24*60*60))" # 86400 

dayssincefeb01="$(((today - feb01) / daysecs ))"
dayssincejan01="$(((today - jan01 + 1) / daysecs ))"

find /path -type d -mtime +"$dayssincefeb01" -mtime -"$dayssincejan01" \
-print0 | xargs -0 rm -r

Команда find в конце находит каталоги старше 1 февраля 2010 года, но моложе 01 января 2010 года и безопасно передает их в xargs, используя '\0'нулевой символ.


./rm_dir_test.sh: строка 1: 24 * 60 * 60: команда не найдена ./rm_dir_test.sh: строка 8:): синтаксическая ошибка: ожидается операнд (маркер ошибки ")") ./rm_dir_test.sh: строка 9 +' to
:)

@AlBouazizi Извините, у меня была опечатка в этой строке (пропущена скобка). Должно быть исправлено сейчас.
jw013

спасибо за ваши усилия .. я хочу проверить вывод с помощью xargs -0 ls -l >> output.file это выполнимо?
AlBouazizi

Вы можете просто заменить rm -rс ls -l.
jw013
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.