А как насчет псевдонима mv ---> "mv -i" это вызовет подсказку каждый раз, когда вы переместите файл.
В csh вы должны поместить это в ~ / .cshrc:
alias mv "mv -i"
Если ls -tr | head -3
дает вам 3 правильные папки, которые нужно сохранить,
затем ls -tr | tail -n +4
предоставит вам все остальные папки (он пропускает 3 первые строки).
С помощью 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
.