Как я выполняю тот же набор команд в нескольких подкаталогах в числовом порядке?

Если я читаю Ваше право вопроса, Вы думаете скопировать/вставить функциональность, найденная в менеджерах по графическому файлу, где Вы "отмечаете" файлы, Вы хотите скопировать, перейти их месту назначения и вставить их там.

Отвечать на Ваш вопрос, короче говоря: Нет. То, что Вы хотите, не возможно на в нормальной оболочке удара. Задержать такую операцию, конечно, возможно с помощью сценариев, но я не уверен, что это стоит усилия в этом случае.

3
12.11.2014, 01:09
2 ответа
cd parent_directory/

for i in {-11..-10}
do
   for j in -2 0
   do
      (
      cd  "E${i}_G/E${j}_U/"
      ls -l ander ander.band ander.data
      cat ander.in
      cat ander.log
      pwd
      )
   done
done

Примечания:

  • Вы можете зациклиться на ряде чисел, используя обозначение скобок:

    для i в {-11. .-10}
    
  • Можно также выполнить цикл над явным списком элементов:

    для j в -2 0.
    
  • Можно изменить каталог так, чтобы в нем было место, зависящее от переменных:

    cd "E${i}_G/E${j}_U/".
    
  • Аргументом к команде cd является директория, указанная относительно текущей директории. После того, как мы выполнили нашу работу в этой директории, мы хотим вернуться обратно в директорию parent_. Есть много способов справиться с этим, но один простой способ сделать это - поместить команду cd и команды, которые должны быть выполнены в этом каталоге, в подоболочку, обозначенную паренами. После выхода из парен, каталог автоматически восстанавливается в том виде, в котором он был до этого.

4
27.01.2020, 21:19

Как более общее решение, можно использовать xargs. Таким образом, можно отделить действие из списка каталогов, на которые вы хотите воздействовать.

Первая запись сценарий, который выполняет действия, в которых вы нуждаетесь:

perform_ander.sh

#!/bin/bash

# Exit immediately on error
set -e

if [[ $# -ne 1 ]] ; then
  echo "USAGE: $0 DIRECTORY" >&2
  exit 1
fi

cd "$1"

ls -l ander ander.band ander.data
cat ander.in
cat ander.log
pwd

Mark сценарий как исполняемый файл:

chmod +x perform_ander.sh

Наконец выполненный:

find -type d -name 'E*_U' | xargs -n1 ./perform_ander.sh

Объяснение

находит

Эти , находят выводы команды все файлы соответствия к stdout

- тип d ограничивает поиск каталогами

- имя 'E* _ U' пределы поиск к каталогам, которые соответствуют шарику

xargs

, команда xargs использует свой стандартный вход в качестве источника аргументов и называет данные команды с теми аргументами.

-n1 указывает, что не больше, чем 1 аргумент передается за один раз.

0
27.01.2020, 21:19

Теги

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