Jeśli kopiowanie odbywa się w jakimś terminalu powłoki (np. Bash), wówczas cp
można wyraźnie polecić skopiowanie pliku, do którego prowadzi łącze --dereference
, zamiast samego łącza. Domyślne zachowanie cp
polega na kopiowaniu plików poprzez podążanie za ich linkami, ale wiele graficznych przeglądarek plików wydaje się mieć domyślne zachowanie polegające na próbie kopiowania linków i zachowaniu większości atrybutów.
man cp
-a, --archive
same as -dR --preserve=all
-d same as --no-dereference --preserve=links
-L, --dereference
always follow symbolic links in SOURCE
Przykład
touch SomeFile.txt
echo "some content" > someFile.txt
ln -s -T someFile.txt someLink
echo "Some content for the test file." > someLink
mkdir someDirectory
ln -s -T someDirectory someDirLink
Fakt, że someLink
jest to link, jest pokazany przez l
flagę na pierwszej pozycji wyniku listingu (a „d” oznacza katalog).
ls -l
drwxrwxr-x. 2 user group 4096 Aug 17 17:17 someDirectory
lrwxrwxrwx. 1 user group 13 Aug 17 17:17 someDirLink -> someDirectory
-rw-rw-r--. 1 user group 32 Aug 17 17:01 someFile.txt
lrwxrwxrwx. 1 user group 12 Aug 17 17:12 someLink -> someFile.txt
Plik zawiera treść, a link wskazuje na plik, ale można go użyć w prawie każdy sposób, w jaki mógłby być plik. (Zwróć uwagę na rozmiar pliku linku a rozmiar pliku tekstowego: 32 bajty vs 12 bajtów.)
cat someFile.txt
Some content for the test file.
cat someLink
Some content for the test file.
Najpierw skopiuj link do katalogu. Następnie skopiuj plik do katalogu za pomocą linku. (Poniżej pokazano również, że łącza do katalogów działają w podobny sposób jak łącza do plików.):
cp -a someLink someDirLink/newCopy
cp -L someLink someDirectory/newCopy.txt
ll -l someDirLink/
lrwxrwxrwx. 1 user group 12 Aug 17 17:12 newCopy -> someFile.txt
-rw-rw-r--. 1 user group 32 Aug 17 17:36 newCopy.txt
Uwaga
Można utworzyć łącza wskazujące pełną ścieżkę lub ścieżkę względną. Ponieważ w tym przykładzie użyto łącza opartego na względnej ścieżce celu znajdującego się w tym samym katalogu, co tworzone łącze, łącze zostało zerwane, gdy zostało skopiowane do nowego katalogu.
cat someDirLink/newCopy
cat: someDirLink/newCopy: No such file or directory
cat someDirLink/newCopy.txt
Some content for the test file.