Команда cp copy с расширением Bash Brace - PullRequest
6 голосов
/ 07 апреля 2011

в командной строке bash я могу выполнить эту копию

cp file.txt test1.txt

но если я попытаюсь скопировать файл file.txt в несколько файлов, например

cp file.txt test{2..4}.txt

Я получаю ошибку

cp: target `test4.txt 'не является каталогом

Ответы [ 2 ]

12 голосов
/ 07 апреля 2011

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

for f in test{2..4}.txt ; do cp file.txt $f ; done
5 голосов
/ 07 апреля 2011

Ну, вы должны понимать, как работают * nix оболочки.

В мире DOS / Windows подстановочные знаки обрабатываются программами.Так, например, xcopy *.txt *.bak означает, что xcopy имеет 2 параметра: *.txt и *.bak.То, как подстановочные знаки интерпретируются полностью, зависит от xcopy.

В мире * nix подстановочные знаки обрабатываются оболочкой.Например, похожая команда xcopy *.txt *.bak расширяется и становится xcopy <list of files ending with .txt> <list of files ending with .back>.Таким образом, предполагая существование от file1.txt до file4.txt плюс еще один файл old.bak, команда будет расширена до xcopy file1.txt file2.txt file3.txt file4.txt old.bak

Для команды cp это именно то, что написал Майкл:вы даете cp более 2 аргументов, последний аргумент должен быть каталогом.

...