Я пытаюсь написать bash-скрипт, который будет запускаться на моем QNap NAS для рекурсивного прикосновения к каталогу. У меня есть это:

find $1 -exec touch {} +

Однако найдите, что поставляется с BusyBox 1.01 не поддерживает аргумент -exec, вот документы:

BusyBox v1.01 (2011.02.08-16:24+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

Итак, есть ли другой подход, который я мог бы использовать вместо того, чтобы достичь той же цели? Благодарю.

2 ответа2

1

У меня была точно такая же потребность, и, поэкспериментировав с различиями в реализации BusyBox, я создал этот 1-строчный bash-скрипт:

[/share/MD0_DATA] # cat ./touch_all_folders
#!/bin/sh
find -type d | sed 's/[^[:alnum:].\/_-]/\\&/g' | xargs touch -c

Вы можете настроить скрипт с параметрами по своему усмотрению. Команда sed экранирует все специальные символы имени файла.

0

Ваш busybox может иметь команду xargs :

find $1  | xargs touch

Эта команда имеет приятный эффект от возможности вызывать, например, touch с несколькими именами файлов одновременно, тем самым значительно сокращая время выполнения сети.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .