2011-04-20 10:24:10 +0000 2011-04-20 10:24:10 +0000
79
79

Przenoszenie plików i folderów rekurencyjnie w systemie Linux

Rozważ:

ls -al ../public-back
drwxrwxr-x 4 apache apache 4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x 2 apache apache 4096 Apr 19 03:33 content
drwxrwxr-x 2 apache apache 20480 Apr 20 06:14 images
drwxrwxr-x 2 apache apache 4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x 4 apache apache 4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 content
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 images
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 video

Jak przenieść zawartość /public-back/templates rekurencyjnie z uprawnieniami do /public/templates?

Odpowiedzi (5)

97
97
97
2011-04-20 14:10:36 +0000

Jeśli nie zrozumiem pytania, to zadziała:

mv /public-back/templates/* /public/templates

Również, jeśli nie masz ogromnej listy plików, dodanie -i zapyta zanim cokolwiek nadpisze, co doda trochę bezpieczeństwa podczas używania znaków wieloznacznych jak *.

10
10
10
2011-04-20 14:24:07 +0000

Strona man dla stanów cp:

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

Spróbuj;

cp -rp /public-back/templates/* /public/templates/
5
5
5
2016-02-17 07:43:21 +0000

Podczas przenoszenia elementów z dysku kciukowego do systemu OSMC, znalazłem następujące bardzo przydatne:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

Wyjaśnienie jak to działa poniżej.

BTW, Nie zapomnij dodać odwrotnego ukośnika przed jakimikolwiek spacjami w nazwach katalogów źródłowych lub docelowych (patrz powyżej).

find finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec Executes a command, in our case mv

-v Verbose, so you can see what's happening (optional)

{} is replaced by the name of the found object.

Efektywnie, znajdujesz wszystkie pliki i wszystkie foldery i przenosisz je jeden po drugim (lub jeśli katalog zostanie znaleziony pierwszy, przenosisz ten katalog i jego zawartość). To rozpoczyna nowy proces dla każdego przeniesienia i jest bardzo nieefektywne. Używaj tego tylko wtedy, gdy zwykłe komendy zawodzą.

2
2
2
2017-09-06 07:05:14 +0000
cp -a --link ../public-back/* /public/. && rm -rf ../public-back

Stwórz więc twarde linki w docelowym katalogu i usuń źródło dir. ‘mv’ po prostu nie będzie działać w twoim przypadku, i generalnie działa tylko wtedy, gdy źródło dir i dest nie mają wspólnych podtematów.

Zauważ, że zakładam, że słowo ‘move’ w pytaniu oznacza, że źródło dir powinno być usunięte po operacji.

2
2
2
2015-10-20 15:24:37 +0000

Mv nie wydaje się tego robić. Ale możesz użyć tej małej sztuczki, działa jak urok:

tar cf - . |(cd /targetdir; tar xvf -)

i zachowuje uprawnienia i wszystko.

Uwaga: żadne z powyższych nie działało dla mnie, dlatego to obejście.