Moim celem jest tylko kopiowanie wszystkich plików z ~ / local_dir to [email protected] / var / www / html / target_dir przy użyciu scp i nie twórz kategorii local_dir w local_dir.
/var/www/html/target_dir/files..
ale nie
/var/www/html/target_dir/local_dir/files.. przy użyciu parametru -r
Komentarze
Odpowiedź
scp ma argument -r. Spróbuj więc użyć:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Argument -r działa tak samo jak -r arg w cp, przeniesie cały folder oraz wszystkie pliki i podkatalogi wewnątrz.
Komentarze
- Twoja komenda utworzyła
local_dirkatalog w / var / www / html / target_dir moim celem jest kopiowanie tylko plików. - Przepraszam, pomyliłem się. Następnie po prostu powtórz polecenie, ale w ten sposób:
$ scp -r ~/local_dir [email protected]:/var/www/html/Następnie zmień nazwę nowego katalogu w razie potrzeby. - Lub
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dirCokolwiek unosi Twoją łódź. - Zmień symbol wieloznaczny
*na kropkę.i ' ll skopiuj zawartość katalogu (w tym wszelkie pliki z kropkami) bez kopiowania samego katalogu.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir - Niestety, używanie
.zostało zepsute przez źle zaimplementowanąscp" bugfix " (patrz < superuser.com/questions/1403473/scp-error-uxpressected-filename/… ).rsyncbyłaby działającą alternatywą.
Odpowiedź
Jeśli Twoim celem jest przeniesienie wszystkich plików z local_dir symbolu wieloznacznego * załatwia sprawę:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
Opcja -r oznacza „rekurencyjnie”, więc musisz ją zapisać, gdy „próbujesz przenieść cały katalog lub kilka katalogów.
From man scp:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Więc jeśli masz podkatalogi w local_dir, ostatni przykład prześle tylko pliki, ale jeśli ustawisz opcję -r, przeniesie pliki i katalogi.
Komentarze
- 1+ Ponieważ musisz przeczytać komentarze w zaakceptowanej odpowiedzi, aby dostać się do poprawnej odpowiedzi, podczas gdy ten po prostu wyjaśnia to bezpośrednio.
Odpowiedź
Dołączanie /. do katalog źródłowy prześle swoją zawartość zamiast samego katalogu. W przeciwieństwie do rozwiązania z użyciem symboli wieloznacznych, obejmie to również wszystkie ukryte pliki.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
Podziękowania za to rozwiązanie trafia do roaima, ale pomyślałem, że powinno zostać opublikowane jako rzeczywista odpowiedź, a nie tylko komentarz.
Komentarze
- Niestety, to rozwiązanie zostało zepsute przez źle zaimplementowane
scp" bugfix " (patrz < superuser.com/questions/1403473/scp-error-uxpressected-filename/… ).
Odpowiedź
Wykonaj następujące kroki:
-
Skopiuj katalog
local_dirze wszystkimi jego podkatalogami:scp -r ~/local_dir [email protected] /var/www/html/target_dir -
skopiuj tylko zawartość
local_dira nie sam kataloglocal_dir:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir -
Nie używaj:
scp -r ~/local_dir/. [email protected] /var/www/html/target_diras zgłasza błąd (właśnie przetestowano i otrzymano następujący błąd):scp: error: unexpected filename: .
Komentarze
- Otrzymuję również błąd związany z nieoczekiwaną nazwą pliku. Jednak użycie symbolu wieloznacznego nie działa, ponieważ katalog zawiera tak wiele plików, że przekracza limit znaków dla poleceń po rozwinięciu symbolu wieloznacznego. macOS
- @RichardKiefer: Możesz używać symboli wieloznacznych, takich jak? z *, aby dalej izolować wyniki wyszukiwania, a następnie przekazać je do scp. Wypróbuj ten link, może pomóc: Symbole wieloznaczne
- Dziękuję Syed, ale chodziło mi o to, że tak naprawdę chcę kierować reklamy na wszystkie elementy w folderze i nie filtruj żadnych. A jeśli w moim katalogu jest za dużo, to symbol wieloznaczny po prostu nie zadziała.
- @RichardKiefer: Przepraszam Richard, aby skopiować wszystkie pliki, możemy użyć małego skryptu bash. Użyj:
ls -l | awk '{print $9}'i przekieruj wszystkie dane wyjściowe (które będą wszystkimi nazwami plików) do pliku tekstowego. Przeczytaj plik txt, po jednej linii na raz i użyj tego wejścia z scp, aby skopiować pliki:input=/home/user/filename.txt while IFS= read -r line
scp * [email protected]:/var/www/html/target_dirnie robi tego, co chcesz? Jeśli tak, edytuj , podając więcej szczegółów ' ponownie próbując & próbowałem do tej pory.