find -type f -name "*.mp4" -print0
Рекурсивно ищите текущий каталог нормальные файлы, имена которых заканчиваются
.mp4
и распечатайте их относительные пути, разделенные пустыми байтами.-print0
более безопасно, чем| xargs -0
Используйте вход в качестве аргументов следующей команде. Вход разделяется от пустого указателя. xargs (1)
mplayer -vo dummy -ao dummy -identify 2>/dev/null
Это - команда это
xargs
работает. Используя фиктивные видеодрайверы и драйверы аудио, покажите параметры файла в легко parseable формате. Отбросьте любой вывод от STDERR. mplayer (1)| perl -nle
Передайте вывод по каналу к Perl. Perl считает строки входа в
$_
переменная, разделяя новые строки от конца. perlrun (1)/ID_LENGTH=([0-9\.]+)/
Если строка соответствует этому регулярному выражению, получите число после "ID_LENGTH =",
&& ($t +=$1)
затем увеличьте переменную
$t
числом, полученным в первом соответствии,&& printf "%02d:%02d:%02d\n",$t/3600,$t/60%60,$t%60'
и вычислите часы, минуты и секунды от
$t
, который является количеством секунд. Из-за-l
в вызове жемчуга новая строка добавляется автоматически кprintf
, таким образом, строка формата содержит один (" \n").| tail -n 1
Только распечатайте последнюю строку вывода. хвост (1)
Для превращения этого конвейера в единственную команду можно создать функцию оболочки в Вашем
.bashrc
или безотносительно емкостно-резистивного файла Ваше использование оболочки. Вот пример:vid_lengths() { find -type f -name "*.mp4" -print0 \ | xargs -0 mplayer -vo dummy -ao dummy -identify 2>/dev/null \ | perl -nle '/ID_LENGTH=([0-9\.]+)/ && ($t +=$1) && printf "%02d:%02d:%02d\n",$t/3600,$t/60%60,$t%60' \ | tail -n 1 }
Можно начать с find /var/dtpdev/tmp/ -type f -mtime +15
.
В результате вы найдете все файлы старше 15 дней и распечатаете их имена.
Опционально в конце команды можно указать -печать
,
но это действие по умолчанию.
Рекомендуется сначала выполнить вышеприведенную команду,
чтобы посмотреть, какие файлы выбраны.
После проверки, что команда find
перечисляет файлы.
которые ты хочешь удалить (и никаких других),
вы можете добавить "действие" для удаления файлов.
Типичными действиями для этого являются:
-exec rm -f {}. \;
(или, эквивалентно, -exec rm -f {} ';"
)
.
При этом для каждого файла будет выполняться rm -f
; например,
rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; ...
-exec rm -f {} +
Это запустит rm -f
на многих файлах одновременно; например,
rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 ...
поэтому он может быть немного быстрее, чем вариант 1.
(Может понадобиться несколько раз запустить rm -f
, если у вас тысячи файлов.)
-delete
найдет
сам, чтобы удалить файлы, не запуская rm
.
Это может быть бесконечно быстрее, чем варианты -exec
,
но он не будет работать на всех системах. Итак, если вы используете вариант 2, то вся команда будет:
find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +
Или сделайте это с помощью цикла:
for x in $(find /var/dtpdev/tmp/ -type f -mtime +15); do rm "$x"; done
Попробуйте:
find /path/to/files/ -cmin +240 -type f -name *.php -delete
ИЛИ
find /path/to/files/ -type f -name *.php -mtime +30 -exec rm {} \;
Первый удалит файлы старше 4 часов, используя встроенную -функцию удаления find
; а второй удалит файлы старше 30 дней, используя rm
в предложении -exec
.
Другим вариантом может быть передача вывода команды find
и использование xargs
для удаления этих:
find /var/dtpdev/tmp/ -type f -mtime +15 | xargs rm
Но ответ Яна, за который проголосовали, все же более действителен, чем этот.
Мне нравится
rm -rf `find yadi`
за его простоту. Эти обратные галочки говорят: «Казните меня первым». Таким образом, вы работаете rm -rf
с результатами того, что находится между ними.