2013-08-21 2 views
3

У меня есть папка, содержащая символические папки.cp -a не может перезаписать символическую директорию

root 
|- Current document -> version 2 document 
|- Current folder -> version 2 folder 
|- Archives 
    |- version 1 document 
    |- version 1 folder 
     |- ... 
    |- version 2 document 
    |- version 2 folder 
     |- ... 

Когда я скопировать этот каталог с cp -r, копиями папок, но так как -r следует симлинке, версия 2 копируется в два раза.

Когда я копирую этот каталог с cp -R, папка копирует в первый раз и сохраняет символические ссылки. Однако, на втором экземпляре, она не в состоянии переписать папку, указав:

cp: cannot overwrite directory 'Current folder' with 'Current folder' 

Я также попытался cp -a == cp -pPR, а также -f версии (cp -fR и cp -fa)

Я думаю, что тесты чтобы увидеть, является ли Current Folder папкой, следуя символическим ссылкам, а затем не может перезаписать символическую ссылку (которая, по ее мнению, это папка), с символической ссылкой.

Какая правильная команда последовательно копировать и перезаписывать папку с символическими папками?

+0

Что-то я не понимаю. Если в первый раз сохраняется символическая ссылка, зачем вам переписывать? Если вы посмотрите в скопированную-символическую папку, разве вы не увидите обновленные файлы там ...? – iamauser

+0

Я обновлю новую версию, скажем, версию 3, а затем нужно указать символические ссылки в новой версии. – kels

+0

Другое, что я не понимаю, так это то, что переход в поисковик и копирование и вставка - правильное поведение. – kels

ответ

4

On OSX, use ditto

Он имеет такое же поведение, как OSX копирования/вставка.


P.S. Один Гоча, что вы можете следить за:

cp -a foo bar 

переместит Foo папку/в строке/(то есть бар/Foo/file1, бар/Foo/file2)

ditto foo bar 

будет переместите содержимое папки foo/в bar (т.е. bar/file1, bar/file2)

0

Это может быть не совсем ответ, но может помочь понять, что именно вы ищете. Вот что я получаю:

# Assume all these happening in a parent directory name pdir. 

mkdir -p test/s 
mkdir -p test1/s1 
cd test/s 
ln -s ../../test1/s1 . # created a symlink 

# go to parent dir pdir 

mkdir -p test2 
cp -R test/* test2/  # Now I copy all the content of test to test2. test contains a symlink directory 

ls -ld test2/s/* 
18 Aug 21 14:53 test2/s/[email protected] -> ../../test1/s1 # symlink dir is preserved during the copy 

# Now I want to modify my source directory before copying again 
# This time I will modify inside the source directory which I have already symlinked 

touch test1/s1/test.txt 

# Without copying I check that the symlink is correctly updated, I don't even need a copy anymore 

ls -ld test2/s/s1/* 
0 Aug 21 14:55 test2/s/s1/test.txt 


# Now I want to create a symlink inside the source symlink directory 
cd test1/ 
touch tmp1.txt 
cd s1/ 
ln -s ../tmp1.txt . # Here it is created 

# go back to parent dir pdir 
# Do the same copy again 

cp -R test/* test2/ 

# You will receive this error: 
cp: cannot overwrite directory test2/stest/stest1 with non-directory test/stest/stest1 
#of course it can't because it is already there 
# even though it complains it can't overwrite the symlink of the dir, 
# but it correctly updates the files that are recently created inside the source dir 

ls -ld test2/s/s1/* 
0 Aug 21 14:55 test2/s/s1/test.txt 
10 Aug 21 14:59 test2/s/s1/[email protected] -> ../tmp1.txt 

Надеется, что это помогает ...

Смежные вопросы