Co oznacza „cp: pominięcie katalogu”?


408

Wydałem następujące polecenie:

sudo cp ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Kiedy to robię, zaczynam otrzymywać następujące wiadomości:

cp: omitting directory `Tag' 
cp: omitting directory `Test' 
cp: omitting directory `Text' 
cp: omitting directory `TimeSync' 
cp: omitting directory `Tool' 
cp: omitting directory `Translate' 
cp: omitting directory `Uri' 
cp: omitting directory `Validate' 

i tak dalej...

Dlaczego otrzymuję te wiadomości?

Odpowiedzi:


535

Domyślnie cpkopiowane są tylko pliki bezpośrednie, a nie podkatalogi w katalogu. Wiadomość cp: omitting directory 'directory'ostrzega, że ​​wymieniony katalog nie został skopiowany.

Aby to zrobić, określ opcję -r(lub --recursive):

sudo cp -r ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Strona podręcznika (polecenie:) man cpzawiera przegląd dostępnych opcji.


2
Wielkie dzięki. Myślałem, że * jakoś sobie z tym poradzi. Ale nie. : D Jeszcze raz dziękuję. :)
MEM,

11
@MEM: *rozszerzenie jest rozwijane przez Bash, a nie przez cp. Sprawdź to sam, stawiając echo przed swoim poleceniem. Po rozwinięciu dopasowuje wszystko do poprzedzającego ...library/Zend/(zawarte w nim pliki i katalogi).
Lekensteyn,

Dobra wiadomość jest taka, omitting directory 'directory'że nie oznacza to, że usuwa on ten katalog.
Bishwas Mishra

@ Lekensteyn próbowałem skopiować zawartość jednego użytkownika do drugiego. Więc uzyskałem pozwolenie od użytkownika chmod a+rx ~/po próbie skopiowania z cp /home/2110/* /home/2111/nim powoduje błąd, który stwierdza, że ​​odmowa dostępu. gdzie się myliłem. przykro mi to komentować, ponieważ nie mogę zadawać duplikatów pytań. mam nadzieję na szybką odpowiedź :)
jasinth premkumar

@jasinthpremkumar Pliki w /home/2110są własnością użytkownika 2110, podczas gdy pliki w /home/2111są własnością 2111. Aby ustawić właściciela, użyj czegoś takiego sudo chown -R 2111 /home/2111.
Lekensteyn

40

Komunikat oznacza, że cpnie skopiowano wymienionych katalogów. Jest to domyślne zachowanie cp- tylko pliki są kopiowane normalnie, niezależnie od tego, czy określasz je jawnie, czy używasz *. Jeśli chcesz skopiować katalogi, użyj -rprzełącznika, który oznacza „rekurencyjny”.


16

Kilka rzeczy, które należy sprawdzić:

  1. Nie używać sudo. Nie potrzebujesz go, masz już uprawnienia do pisania rzeczy we własnym katalogu domowym.

  2. Możesz łatwo przeglądać ukryte pliki i katalogi w graficznym menedżerze plików, wybierając z menu opcję Wyświetl / pokaż ukryte pliki. Lub naciskając Ctrl- H.

  3. Musisz użyć -Ropcji w cppoleceniu, aby skopiować katalog i jego zawartość.

  4. / home nie jest twoim katalogiem domowym. / home / nazwa użytkownika to. Prawdopodobnie próbujesz skopiować z niewłaściwego miejsca.

  5. W powłoce rozróżniana jest wielkość liter, więc ~ / download i ~ / Downloads to dwie różne rzeczy.


2

Podczas kopiowania katalogu takiego jak:

cp dir1 copy_of_dir1

Kopiujesz tylko dir1siebie, a nie zawarte w nim pliki, więc na końcu skończysz z nową strukturą katalogów, podczas gdy ta struktura nie istnieje.

Innymi słowy, po to został skopiowany będzie powiedzieć, że moje zawartość jest file1, file2itp; Jednak te pliki nie zostały skopiowane i dlatego w nim nie istnieją.

Aby rozwiązać ten problem, który mógł się pojawić cpdomyślnie, nie kopiuje katalogów i pomija je, chyba że określisz -ropcję kopiowania wszystkich plików również rekurencyjnie.


1

Powodem tego omitting directoryjest to, że cpi wszystkie znane mi narzędzia do kopiowania tworzą listę plików i podkatalogów, które należy skopiować przed rozpoczęciem kopiowania plików. Gdy --recursivebrakuje opcji, podkatalogi są usuwane z tej listy. Jako takie pominięcie oznacza usunięcie z listy kopii, a nie z nośnika źródłowego. Uważam, że dotyczy to znaczenia wiadomości.


0

Polecenie cp służy do kopiowania plików i katalogów, a nie zagnieżdżonych katalogów. Jeśli chcesz skopiować katalogi zagnieżdżone, możesz dodać -r po czym, gdzie -r oznacza rekurencyjny.

Składnia, którą możesz zastosować (działając jako root):

cp -r /source/dir/* /destination/ 

lub

cp --recursive /source/dir/* /destination/

-1

Załóżmy, że masz dwa katalogi „Tag” i „Test”

Jeśli chcesz skopiować katalog „Tag” do katalogu „Test”, użyj polecenia

$ : cp -r Tag Test (case sensitive)

Przeważnie problem zostanie rozwiązany za pomocą powyższego kodu, jeśli nie, i pojawi się komunikat poniżej

cp: omitting directory `Tag' 
cp: omitting directory `Test'

następnie dodaj niektóre pliki do katalogu „Tag”, a następnie skopiuj je do „Test”. Właściwie to mam ten sam problem, ale rozwiązany tak, jak powiedziałem po drugie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.