Я хочу, чтобы мой сценарий оболочки посещал все подкаталоги в главном каталоге. Сделайте что-нибудь в каталогах, отправьте вывод в буферный файл и перейдите к следующему каталогу. Рассмотрим Main Dir = / tmp Sub Dir = ABCD (четыре подкаталога)
bash
shell-script
Ashish
источник
источник
Ответы:
Используйте
for
цикл:Он ищет только подкаталоги каталога
/path/to/dir
. Обратите внимание, что простой пример, приведенный выше, потерпит неудачу, если имена каталогов содержат пробелы или специальные символы. Более безопасный подход:Или просто
bash
:(обратите внимание, что в противоположность
find
этому также рассматриваются символические ссылки на каталоги и исключаются скрытые)источник
find
как это.date +"%m%d20%Y"
| xargs echo echo $ дdate +"%m%d20%Y"
| xargs echo echo $ d Ожидаемый результат - ls -ltr из всех подкаталогов , Вышеупомянутая петля не работаетЯ полный
bash
новичок, но ветеран UN * X. Хотя, несомненно, это можно сделать в сценариях оболочки Bash, в прежние времена мы привыклиfind [-maxdepth <levels>] <start-dir> -exec <command> ;
к этому. Вы могли бы сделатьman find
и поиграть, возможно, пока кто-то не скажет вам, как это сделать вbash
!источник
find
команды.$(find...)
Вещь плохая практика .Похоже, вы хотите имена файлов под каждым из подкаталогов; что
ls -l | awk
недостаточно надежно, для чего, если эти имена файлов содержат пробелы и / или символы новой строки? Нижеследующееfind
будет работать даже дляfind
тех, у кого не получилось-maxdepth
:источник
Я получил решение. Команда find ниже отвечает моим требованиям.
источник
Также возможно использование ls, grep и tr
du / sed также может быть использован как селектор, если у вашего ls нет вышеупомянутых опций
Может быть важно отметить, что эти примеры возвращают скрытые каталоги и исключают родительские и текущие каталоги
источник
ls
записывает по одному файлу на строку (что-1
указывает опция) по умолчанию, когда стандартный вывод представляет собой канал (так что это лишнее в ваших ответах). (2) Анализ выходных данныхls
является плохой идеей - посмотрите на это и на это . Ваш первый ответ потерпит неудачу, если в именах каталогов есть пробелы (или новые строки), и все они потерпят неудачу, если в их именах будут новые строки. (3) Вы должны всегда заключать в кавычки переменные оболочки (например,"$dir"
), если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете.