Найти и удалить подпапки, сохраняя только самые последние.

А как насчет псевдонима mv ---> "mv -i" это вызовет подсказку каждый раз, когда вы переместите файл.

В csh вы должны поместить это в ~ / .cshrc:

 alias    mv     "mv -i"
2
14.09.2016, 17:38
2 ответа

Если ls -tr | head -3 дает вам 3 правильные папки, которые нужно сохранить, затем ls -tr | tail -n +4 предоставит вам все остальные папки (он пропускает 3 первые строки).

5
27.01.2020, 21:51

С помощью zsh:

cd /some/specific/folder && echo rm -rf -- *(/n[1,-4])

Удалите все папки, кроме трех последних (/) в числовом (n) порядке сортировки (где subfolder10 сортирует после subfolder2), исключая скрытые.

Удалите echo для фактического выполнения операции.

Обратите внимание, что время создания не записывается во многих системах, а когда оно записывается (как в последних версиях Linux), его нелегко получить. Все, на что вы можете положиться, это время последней модификации (дата, показанная в ls -l).

Чтобы удалить все, кроме трех последних модифицированных, все еще с помощью zsh:

cd /some/specific/folder && echo rm -rf -- *(/Om[1,-4])

Om обратный порядок по времени модификации (от самого старого к самому новому, как ls -tr).

Если у вас нет или нет возможности установить zsh, но вы работаете на последней системе GNU, вместо этого можно сделать следующее:

(export LC_ALL=C
cd /some/specific/folder &&
  find . ! -name . -prune -type d ! -name '.*' -printf '%T@\t%f\0' |
    sort -rnz |
    tail -zn +4 |
    cut -zf 2- |
    xargs -r0 echo rm -rf --)

Для менее новых систем GNU (-z только недавно был добавлен к некоторым из этих утилит):

(export LC_ALL=C
cd /some/specific/folder &&
  find . ! -name . -prune -type d ! -name '.*' -printf '%T@\t%f\0' |
    tr '\n\0' '\0\n' |
    sort -rn |
    tail -n +4 |
    cut -f 2- |
    tr '\0\n' '\n\0' |
    xargs -r0 echo rm -rf --)

Если ни одно из имен файлов в каталоге не содержит новых строк, пробелов, кавычек или обратных слешей, вы также можете сделать:

cd /some/specific/folder &&
  ls -pt | grep '/$' | tail -n +4 | xargs echo rm -rf --

Для числовой сортировки, подобной zsh's *(n), см. также опцию GNU ls -v.

3
27.01.2020, 21:51

Теги

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