1

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

OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..

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

1 ответ1

2

скрипт

for DIR in *; do
    [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done

Один лайнер

for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done

Как это устроено

  • Bash расширяет * все файлы и каталоги в текущем каталоге.

  • for DIR in *; do ... done проходит через это и выполняет ... для каждого.

    В каждом случае $DIR содержит имя текущей записи.

  • [ -d "$DIR" ] && ... проверяет, действительно ли $DIR является каталогом (а не файлом).

    Если это так, ... исполняется.

  • cat "$DIR"/*.xml > "$DIR.xml" делает именно то, что делают ваши четыре строки кода.

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