Установка Linux на запасной SSD

Пока Кусалананда ответил на ваш вопрос о том, почему somefile.txt появляется в выводе ls, я попытаюсь ответить на вопрос о том, как чтобы удалить все, кроме двух последних созданных файлов, поскольку связанный вопрос вместо этого касается последних модифицированных файлов.

Во-первых, вам не нужно записывать вывод в файл. Команды могут взаимодействовать друг с другом напрямую, для этого и нужны каналы.

Здесь вы могли бы сделать:

ls -tU | tail -n +3 | xargs echo rm -f -- # echo for dry-run

Но в общем случае это ошибочно, так как tail работает со строками, а xargs работает со словами (возможно, в кавычках), а имена файлов не гарантируется ни один из них. Даже не гарантируется, что они являются действительным текстом. Это будет работать правильно, только если ни одно из имен файлов не содержит пробелов, новых строк, кавычек, обратной косой черты или последовательностей байтов, не образующих допустимых символов.

Если используется система FreeBSD (как предполагает ваше использование -U), вы можете использовать выходной формат json, который надежно анализируется, например:

ls --libxo=json -Ut |
  perl -MJSON::PP -l0 -0777 -ne '
    @files = map {$_->{name}} @{
      decode_json($_)->{"file-information"}->{directory}->[0]->{entry}
    };
    print for @files[2..$#files]' | xargs -0 echo rm -f --
1
29.04.2016, 10:30
0 ответов

Теги

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