Назад | Перейти на главную страницу

Эквивалент forfiles.exe в Linux

извините, если об этом спрашивали раньше, но мне было любопытно, что такое эквивалентная команда Linux для forfiles.exe в винде? Это пришло мне в голову, когда я увидел этот вопрос

find - это полноценная замена, но для простых операций с файлами в текущем каталоге это sh-script может быть довольно полезным (и его легче читать / писать):

for file in *.jpg; do
  echo "do something with $file"
done

В найти команда делает то, что вы хотите. Вот пример:

find /mnt/Pictures -name '*.jpg' \! -mtime 7 -exec rm {} \;

Это удалит все файлы jpg из /mnt/Pictures, которые не изменялись за последние 7 дней (168 часов). Если вас не волнует регистр имен файлов, используйте -iname вместо того -name.

Вот соответствие между параметрами forfiles и параметры найти:

  • /p → путь - это первый аргумент поиска.
  • /s → по умолчанию поиск выполняется во всех подкаталогах. Чтобы отключить это, используйте -maxdepth вариант со значением 1, т.е. -maxdepth 1.
  • /c-exec. Также замените @file с участием {} и не забудьте завершить команду \; (многих новичков укусила эта ошибка).
  • /d-mtime n. Данные файла были в последний раз изменены n* 24 часа назад

! отменяет условие. ! - это специальный символ в некоторых оболочках, включая Bash, поэтому его нужно экранировать или заключать в кавычки, поэтому вы напишете \! большую часть времени.

думаю найти предоставляет функциональные возможности, предлагаемые forfiles.

Вы можете создать задание cron, которое использует find с соответствующими аргументами, например -mtime +7