Используя находку busybox для удаления рекурсивно некоторых файлов

Как я могу найти и удалить весь .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
5
задан 8 February 2015 в 20:23

3 ответа

Вы, кажется, используете Busybox find, не GNU find. В то время как Busybox find, как предполагается, поддерживает -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.

7
ответ дан 23 November 2019 в 08:48

Для действительно старых версий BusyBox (как печально используется моим NAS QNAP), не будут работать предложения с помощью -print0, -exec и -delete.

я должен был обратиться к созданию списка и использованию цикла:

IFS= 

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

\n' aFiles=( $(find . -name '*.jpg') ); for sFile in "${aFiles[@]}"; do rm "${sFile}"; done

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

0
ответ дан 23 November 2019 в 08:48
find . -type f -name "*.jpg" -exec rm -vf {} +

Это удалит "файлы" (и не "каталоги") заканчивающийся на ".jpg".

Мышление, хотя: Вы не должны делать этого как корня. Ошибка в команде может уничтожить Вашу систему, и если не использующий корень был бы ошибка на ошибке полномочий.

нет никакого пути назад от этого, если Вы не создали резервное копирование.

, Если Вы делаете

find . -type f -name "*.jpg" | more 

, Вы доберетесь, список файлов, собирающихся быть удаленным (эти | more, покажет Вам результат на страницах).

<час>
find . type f -name "*.jpg" -print0 | xargs -0 rm

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

4
ответ дан 23 November 2019 в 08:48

Другие вопросы по тегам:

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