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_dir
katalog 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_dir
Cokolwiek 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/… ).rsync
był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_dir
ze wszystkimi jego podkatalogami:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
skopiuj tylko zawartość
local_dir
a 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_dir
as 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_dir
nie robi tego, co chcesz? Jeśli tak, edytuj , podając więcej szczegółów ' ponownie próbując & próbowałem do tej pory.