Разветвление трубопровода в оболочке

Прежде всего, я пытался искать похожие темы в Google и Stackru, но ничего подобного не нашел.

ВОПРОС:

Есть ли способ обработки разветвления трубопровода в оболочке?

ПРИМЕР:

У меня есть следующее дерево каталогов:

> 1
>> 1.a
>> 2.a
>> 3.a
> 2
>> 1.b
>> 2.b
>> 3.b

Когда я выполняю команду:

ls -1 */* | nl

Я получаю следующий вывод:

1  1/1.a
2  1/2.a
3  1/3.a
4  2/1.b
5  2/2.b
6  2/3.b

Если бы я хотел сослаться на первый столбец, я бы использовал cut с параметром -f1. Точно так же, если бы я хотел сослаться на второй столбец, я бы использовал параметр -f2. Могу ли я использовать приведенную ниже команду каким-либо образом?

ls -1 */* | nl | mv `cut -d'   ' -f1` `cut -d'    ' -f2`

Я не против способа переименования файлов. Я на самом деле хочу знать, существует ли параллельная конвейерная обработка в оболочке.

2 ответа

Разбор вывода ls настоятельно не рекомендуется; Я бы использовал следующее вместо этого.

count=1
for f in */*; do
    echo mv "$f" $((count++))
done 

Вы можете использовать это для цикла:

while read -r f1 f2; do
   [[ -n "$f1" && -n "$f2" ]] && mv "$f1/$f2" "$f2"
done < <(ls -1 */* | nl)

Вот скрипт не BASH:

ls -1 */* | nl | while read -r f1 f2; do
   [ -n "$f1" ] && [ -n "$f2" ] && mv "$f1/$f2" "$f2"
done
Другие вопросы по тегам