Linux - Удалите последние два файла автоматически

Расширение истории на самом деле работает на текущей команде, используя дизайнер событий ! # . Объедините это со словом Designator для последнего аргумента - $ - Чтобы получить параметр, который вы только что набрали. И вы можете использовать все обычные модификаторы над ним, поэтому, если, например, вы переименяете файл в далеком каталоге, вы можете просто ввести:

mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname
0
06.06.2014, 02:00
2 ответа

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

$ ls -t | head -n 2 | xargs rm -f

Пример

Допустим, у меня есть эти файлы.

$ seq 5 | xargs -n 1 touch
$ ls -ltr
total 0
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 1
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 2
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 3
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 4
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 5

Использование ls -t | head -n 2 даст мне последние 2 измененных файла.

$ ls -t | head -n 2
5
4

И я могу передать их в xargs rm -f , чтобы удалить их.

$ ls -t | head -n 2 | xargs rm -f
$ ls -tr
total 0
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 1
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 2
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 3
3
28.01.2020, 02:17

С помощью zsh

rm -f -- *(D.om[1,2])

удаляет (до) два самых новых (с точки зрения времени последней модификации) обычных файлов в текущем каталоге.

С инструментами GNU:

eval "files=($(ls -At --quoting-style=shell-always))"
n=2
for f in "${files[@]}"; do
  if [[ -f $f && ! -L $f ]]; then
    rm -f -- "$f"
    ((--n)) || break
  fi
done
2
28.01.2020, 02:17

Теги

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