Почему Linux использует драйверы SCSI для устройств, отличных от SCSI? [Дубликат]

При использовании рекурсивного подстановки гораздо меньше набора текста и возни. . В bash поместите shopt -s globstar в свой .bashrc . В ksh93 для рекурсивного подстановки требуется установить -o globstar ; в zsh работает из коробки. Помните, что в bash рекурсивная подстановка также рекурсивна по символическим ссылкам на каталоги.

Чтобы сэкономить на манипуляциях со строками, сначала перейдите в верхнюю часть исходного дерева (или в верхнюю часть целевого дерева).

cd foo
for x in **/*.foo; do foo "$x" >"../dest/${x%.*}.changed.foo"; done

Вы можете опустить двойные кавычки, если знаете, что имена ваших файлов не содержат пробелов или символов подстановки.

В zsh двойные кавычки никогда не нужны, и вы можете сэкономить на вводе текста даже без изменения текущего каталога.

for x in src/**/*.foo; do foo $x >../dest/${${x#*/}%.*}.changed.foo; done
for x in src/**/*.foo; do foo $x >../dest/${x#*/}:r.changed.foo; done
for x (src/**/*.foo) foo $x >../dest/${x#*/}:r.changed.foo

Если вы делаете это часто, вам следует определить правило сборки, например в файле GNUmakefile (используйте вкладку, где я использовал 8 пробелов):

source_files = $(shell find src -name '*.foo')
destination_files = $(patsubst src/,dest/,$($(source_files)%.foo=.changed.foo))

default: all-foo
all-foo: $(destination_files)

dest/%.changed.foo: src/%.foo
        foo $< >$@

14
07.01.2015, 00:56
0 ответов

Теги

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