Как скопировать в cp, если папка назначения уже существует?

И в kubuntu 12.04+ это:

qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 0 0
1
задан 2 February 2013 в 01:58

3 ответа

Флаг -T (AKA --no-target-directory) делает то, что вы хотите:

$ cp -R --verbose -T /tmp/a /tmp/b
`/tmp/a/file1' -> `/tmp/b/file1'
`/tmp/a/file2' -> `/tmp/b/file2'
8
ответ дан 25 May 2018 в 01:51

Предполагая Bash, вы можете сделать

( shopt -s dotglob; cp -f -R --verbose /tmp/a/* /tmp/b/ )

. Что это делает:

он убедится, что globs (*) поймают файлы с точкой впереди. Они считаются «скрытыми» по соглашению. * будет расширяться до того, как cp получит команду. Поэтому, если в вашем вопросе есть два файла, расширенная командная строка будет cp -f -R --verbose /tmp/a/file1 /tmp/a/file1 /tmp/b/, наконец, конечная обратная косая черта в месте назначения сделает ее копию в этой папке /tmp/b/.

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

6
ответ дан 25 May 2018 в 01:51
$ cp -r --verbose a/. b
`a/.' -> `b'
`a/./zzz' -> `b/zzz'

$ cp -r --verbose a/. b
`a/./zzz' -> `b/./zzz'

Не думаю, что я видел, как это описано где угодно; Я просто пытался использовать разные возможности и нашел тот, который работал. Насколько я знаю, это закономерное следствие того, как работают /. и cp. (В отличие от синтаксиса для rsync, упомянутого в другом ответе, который явно задокументирован как частный случай).

1
ответ дан 25 May 2018 в 01:51

Другие вопросы по тегам:

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