Удалить последний измененный файл

Я создал два файла: sample.txt и sample.txt (второй файл содержит некоторые скрытые символы, например пробел). Как удалить последний измененный файл? Я использую Linux.

5 Solutions collect form web for “Удалить последний измененный файл”

stat является основным ингредиентом в этом рецепте: удалите echo если вы удовлетворены его работой

 echo rm "$(stat -c "%Y:%n" * | sort -t: -n | tail -1 | cut -d: -f2-)" 

Вы не указываете свою платформу: это инструменты Linux и GNU.

Обратите внимание, что это не работает, если имя файла содержит новую строку.

Простой и надежный способ удаления последнего файла в текущем каталоге

 zsh -c 'rm ./*(om[1])' 

Конечно, если вы используете zsh, это просто

 rm ./*(om[1]) 

В отличие от других решений, предлагаемых в этом потоке, таких как синтаксический анализ вывода ls или stat , это работает независимо от того, какие странные символы содержат имя файла, даже непечатаемые символы, даже новые строки.

Символы в круглых скобках после * являются квалификаторами glob . om означает сортировку по времени модификации (последнее последнее), а [1] означает выбор только первого файла (после сортировки).

Если вы хотите, чтобы избавиться от определенного файла, полагаясь на время модификации, это сложный подход. Вместо этого введите rm Space Tab и перейдите к завершению, которое предлагает ваша оболочка, пока вы не нажмете нужный файл.

Если вы хотите удалить последний файл в каталоге с именем dir , а имя файла не будет содержать символ новой строки, сделайте следующее:

 rm -i -- "$(LC_CTYPE=C ls -t dir | head -1)" 

Помните, что если имя файла содержит непечатаемые символы, это может не сработать, потому что ls может калечить непечатаемые символы.

Если последним файлом в каталоге является другой каталог, вы получите сообщение об ошибке, например, rm: cannot remove 'dir2': Is a directory .

Для этого нет (переносного) прямого способа. Но если одно из решений в Unix / Linux находит и сортирует по дате, измененной (которая не имеет принятого ответа) работает для вас, тогда вы будете делать что-то вроде

 rm -f "$(find-sorted-list | head -n 1)" 

где find-sorted-list может включать временную метку, которая должна быть обрезана с передней стороны строки, например, со сценой, включающей sed.

 sed -e 's/^[^ ]* //' 

для просто цифр и двоеточий.

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

Вот функция оболочки, которая полагается на утилиту stat ; вызовите его с дополнительным параметром каталога (по умолчанию это . , текущий каталог), и он выполнит интерактивный rm самого старого файла. Чтобы бросить некоторую осторожность на ветер, удалите флаг -i в rm . Он намеренно пропускает каталоги и поэтому исследует только файлы в данном каталоге. Чтобы иметь дело с пустыми каталогами, я добавил несколько shopt обхода shopt . Это должно, однако, иметь дело (а также возможно) с файлами, в которых есть имена и пробелы.

 function rmoldest { shoptnow=$(shopt -p nullglob) shopt -s nullglob tstamp=$(date +%s) file= dir=$1 dir=${dir:-.} for f in "$dir"/* do if [ ! -d "$f" ] then y=$(stat -c "%Y" "$f") if [ $y -lt $tstamp ] then file="$f" tstamp=$y fi fi done $shoptnow if [ -n "$file" ] then /bin/rm -i "$file" fi } 

Вот пример запуска (ведущие $ – подсказки моей оболочки, не набирайте их):

 $ touch sample.txt; sleep 1; touch 'sample.txt ' $ ls -l total 0 -rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt -rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt $ rmoldest /bin/rm: remove regular empty file './sample.txt'? y $ ls -l total 0 -rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt $ rmoldest /bin/rm: remove regular empty file './sample.txt '? y $ ls -l total 0 
  • Можете ли вы прочитать обновленное mtime, но при чтении содержимого они еще не обновлены?
  • Команда ls без (скрытия) даты и времени
  • Почему прикосновение может меняться только все время, или ничего, если не владелец
  • Странное форматирование даты в сценарии bash
  • Временная метка оборудования с использованием PTP
  • Как отрегулировать временную метку Exif фотографии, используя дату в названии
  • Каково законное использование команды `touch`?
  • Как определить, действительно ли cp -u скопировал файл?
  • Скопировать дату создания файла в метаданные в ffmpeg
  • Удалить подкаталоги с YYYYMMDD с именем старше N дней
  • По какому случаю будет изменен индекс inode?
  • Linux и Unix - лучшая ОС в мире.