Использование findbox для рекурсивного удаления некоторых файлов
Как я могу найти и удалить все.jpg? - кажется, что он не работает...
[/share/Multimedia/Music] # find . -name '*.jpg' -delete
BusyBox v1.01 (2015.01.25-18:47+0000) multi-call binary
Usage: find [PATH...] [EXPRESSION]
Search for files in a directory hierarchy. The default PATH is
the current directory; default EXPRESSION is '-print'
EXPRESSION may consist of:
-follow Dereference symbolic links.
-name PATTERN File name (leading directories removed) matches PATTERN.
-print Print (default and assumed).
-type X Filetype matches X (where X is one of: f,d,l,b,c,...)
-perm PERMS Permissions match any of (+NNN); all of (-NNN); or exactly (NNN)
-mtime TIME Modified time is greater than (+N); less than (-N); or exactly (N) days
3 ответа
Вы, кажется, используете Busybox find
не GNUfind
, Пока Busyboxfind
должен поддерживать -delete
, версия с Ubuntu не кажется.
$ busybox find --help
BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) multi-call binary.
Usage: find [PATH]... [OPTIONS] [ACTIONS]
Search for files and perform actions on them.
First failed action stops processing of current file.
Defaults: PATH is current directory, action is '-print'
-follow Follow symlinks
-xdev Don't descend directories on other filesystems
-maxdepth N Descend at most N levels. -maxdepth 0 applies
actions to command line arguments only
-mindepth N Don't act on first N levels
-depth Act on directory *after* traversing it
Actions:
( ACTIONS ) Group actions for -o / -a
! ACT Invert ACT's success/failure
ACT1 [-a] ACT2 If ACT1 fails, stop, else do ACT2
ACT1 -o ACT2 If ACT1 succeeds, stop, else do ACT2
Note: -a has higher priority than -o
-name PATTERN Match file name (w/o directory name) to PATTERN
-iname PATTERN Case insensitive -name
-path PATTERN Match path to PATTERN
-ipath PATTERN Case insensitive -path
-regex PATTERN Match path to regex PATTERN
-type X File type is X (one of: f,d,l,b,c,...)
-perm MASK At least one mask bit (+MASK), all bits (-MASK),
or exactly MASK bits are set in file's mode
-mtime DAYS mtime is greater than (+N), less than (-N),
or exactly N days in the past
-mmin MINS mtime is greater than (+N), less than (-N),
or exactly N minutes in the past
-newer FILE mtime is more recent than FILE's
-inum N File has inode number N
-user NAME/ID File is owned by given user
-group NAME/ID File is owned by given group
-size N[bck] File size is N (c:bytes,k:kbytes,b:512 bytes(def.))
+/-N: file size is bigger/smaller than N
-links N Number of links is greater than (+N), less than (-N),
or exactly N
-prune If current file is directory, don't descend into it
If none of the following actions is specified, -print is assumed
-print Print file name
-print0 Print file name, NUL terminated
-exec CMD ARG ; Run CMD with all instances of {} replaced by
file name. Fails if CMD exits with nonzero
Я не знаю, почему вы используете Busybox find
, но попробуйте использовать /usr/bin/find
вместо. Или же -exec rm {} +
(без поддержки -execdir
либо), либо xargs
решение, которое предлагает Rinzwind.
find . -type f -name "*.jpg" -exec rm -vf {} +
Это удалит "файлы" (а не "каталоги"), заканчивающиеся на ".jpg".
Имейте в виду: вы не должны делать это как root. Ошибка в команде может убить вашу систему, и если не использовать root, произойдет ошибка при разрешении.
Обратного пути от этого нет, если вы не создали резервную копию.
Если вы делаете
find . -type f -name "*.jpg" | more
вы получите список файлов, которые должны быть удалены (| more
покажет вам результат в страницах).
find . type f -name "*.jpg" -print0 | xargs -0 rm
тоже работает Тот же принцип: результаты передаются в команду xargs, которая делает rm для каждого найденного файла.
Для действительно старых версий BusyBox (как, к сожалению, используется моим QNAP NAS), предложения с использованием -print0
, -exec
а также -delete
не сработает
Мне пришлось прибегнуть к созданию списка и использовать цикл:
IFS=$'\n' aFiles=( $(find . -name '*.jpg') );
for sFile in "${aFiles[@]}"; do rm "${sFile}"; done
Команда, разбитая на два шага, позволяет одному проверить правильность найденных файлов перед их удалением.