Рекурсивная сенсорная команда на BusyBox 1.01

1506
Jack Sleight

Я пытаюсь написать 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 

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

0
В какой оболочке вы находитесь? / Что у вас есть в наличии? Я надеюсь, что у одного из них будет `for` или` read`, чтобы взять список из -int find? PriceChild 13 лет назад 0

2 ответа на вопрос

1
Erhhung

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

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

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

0
Turbo J

Your busybox may have the xargs command:

find $1 | xargs touch 

This command has the nice effect of being able to call e.g. touch with multiple file names at once, thus shorting the net run time quite a bit.

Да, есть Xargs. Кажется, работает, но некоторые файлы имеют 'символы в именах файлов, и я получаю "xargs: непревзойденные одинарные кавычки". Есть идеи? Jack Sleight 13 лет назад 0