На основе Ответ Рахула :
$ ls -ltr | grep -v '^d' | awk 'NR==2 {print $NF; exit}' | xargs -I '{}' mv -- '{}' ../complete/
Примечания:
ls -lt
(что использовал Рахул) перечисляет текущий каталог
в длинном формате в порядке по дате / времени изменения,
с самым новым первым и самым старым последним.
ls -ltr
- это r , противоположное этому; сначала старые, а последние - самые новые. .
),
добавьте параметр A
в ls
; например, ls-ltrA
.
(Порядок параметров не имеет значения;
вы можете использовать ls-ltAr
, ls-lAtr
или даже ls -ltr-A
, если хотите.) ls
листинге каталога всегда сначала идет строка total
.
В ls -ltr
самая старая запись находится во второй строке . grep -v '^ d'
отфильтровывает каталоги (если есть). awk 'NR == 2 {print $ NF; exit} '
печатает последнее поле (имя файла *)
из второй строки (самый старый файл), а затем завершает работу.
хвост -1 | awk '{print $ NF}'
. awk
, ls
также может выйти,
и вы избежите создания списка для всего каталога. Вы можете удалить grep
, выполнив
ls -ltr | awk '! / ^ d / {count ++} count == 2 {print $ NF; exit} '
, но я бы не советовал. Слишком сложные скрипты сложно поддерживать.
-
после mv
в xargs
команде необходимо
, если у вас есть имена файлов, начинающиеся с -
. Вам действительно не нужны xargs
.
Вы можете упростить приведенную выше команду до
$ mv - $ (ls -ltr | grep -v '^ d' | awk 'NR == 2 {print $ NF; exit}') .. / complete /
________
* Как и в случае с ответом Рахула, это не сработает, если имя файла содержит пробелы или табуляцию (и) - и даже хуже, если оно содержит новую строку ( с).
Если у вас могут быть файлы, имена которых начинаются с точки (.
),
выполните shopt -s dotglob
перед выполнением
$ mv -- * ../error/