Как выполнить сценарий удара на нескольких каталогах?

Это решение (для Linux) из http://www.arrfab.net/blog/?p=107 помогло для Seagate на 1 ТБ Портативному диску, который продолжал засыпать:

# sdparm --clear=STANDBY /dev/sdc -S

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

3
31.01.2013, 00:22
3 ответа

Попробуйте это

curdir=$(pwd)
for folder in /path/to/Files/*; do 
  [ -d "$folder" ] && cd "$folder" && ./conv.sh
done
cd $curdir

Или принятие Вас в /path/to/Files/, это также работает

for f in *; do [ -d "$f" ] && cd "$f" && ./conv.sh; done; cd ..

Вы могли использовать F{1..20} вместо * для большей точности.

2
27.01.2020, 21:17
  • 1
    К сожалению, я добираюсь: 'удар: синтаксическая ошибка около неожиданного маркера 'делает' –  supermario 31.01.2013, 02:33
  • 2
    Ой, мое плохое, это исправлено теперь. Было ненужное ; –  Martín Canaval 31.01.2013, 03:57
  • 3
    Просто необходимая замена '&&./conv.sh' с '&& колотит/path/to/conv.sh'. Иначе работайте, как предназначено. Спасибо –  supermario 31.01.2013, 13:52
  • 4
    Любое решение повредится, если Ваш текущий рабочий каталог будет содержать пробел, необходимо заключить в кавычки внутри [, или используйте [[. –  Chris Down 11.03.2013, 09:50

Попытайтесь делать это:

./conv.sh /path/to/Files/F[0-9]*/*.mp3

Эта обработка команды только mp3 в директорах, начинающих F и число с помощью шариков

2
27.01.2020, 21:17

Можно использовать параллель GNU или xargs:

echo /path/to/Files/F{1..20} | tr ' ' '\n' |
  xargs -L conv.sh

или:

echo /path/to/Files/F{1..20} | tr ' ' '\n' |
  parallel conv.sh

Редактирование - обрабатывает пространство разумно

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

Лучший способ обработать эти проблемы состоит в том, чтобы использовать пустой указатель в качестве разделителя, например, с GNU найдите:

find /path/to/Files -mindepth 1 -maxdepth 1 -type d -regex '.*/F[0-9]*' -print0 |
  parallel -0 conv.sh
1
27.01.2020, 21:17
  • 1
    Это работает с файлами, содержащими пространство: найдите что-либо подобное conv.sh:::/path/to/Files/F {1.. 20} –  Ole Tange 04.02.2013, 15:12

Теги

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