Bash :в чем разница между `cp файлA файлB `и `cp --файлA файлB`

Первые два имели бы больше смысла при рекурсивном копировании, т.е. cp -r. Разница возникает, если источником является именованный каталог, а место назначения существует. Из них:

cp -r src/  dest
cp -r src/. dest

первый скопирует srcв dest, создав dest/srcи файлы внутри него(src/aстанет dest/src/a), а второй скопирует содержимое src, поэтому src/aстанет dest/a.

В двух других оболочка расширяет шар,поэтому содержимое каталога (, кроме dotfiles ), копируется даже без -r.

cp./*  dest
cp./** dest

В первом случае оболочка расширяет ./*список имен файлов в текущем каталоге (, за исключением тех, которые начинаются с точки ), и cpкопирует их. Во втором случае оболочки, поддерживающие его, расширят ./**до рекурсивного списка имен файлов, и снова cpскопируют файлы, указанные в нем.

Рекурсивный **работает по крайней мере в Bash, если установлен shopt -s globstar, в ksh с set -o globstar.

Ни Bash, ни ksh не включают файлы или каталоги с именами, начинающимися с точки, в результат **, независимо от того, на каком уровне дерева они появляются, поэтому использование этого способа не очень хорошо для создания полной копии файла. полная структура каталогов; cp -r. destтакже будет копировать точечные файлы.

Bash имеет shopt -s dotglob, который показывает точечные файлы как с *, так и с **, я не уверен, что ksh имеет аналогичную функцию.

1
14.11.2019, 20:09
0 ответов

Теги

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