Błąd podczas korzystania z SCP: „nie jest to zwykły plik”

72

Od jakiegoś czasu szukam i nie mogę znaleźć definicji zwykłego pliku. Moja ścieżka jest stała (zaczynam od /) i łączę się

scp root@IP: /path/to/picture.jpg

Powoduje zapytanie o hasło, a następnie ...

scp: .: not a regular file
JeffM
źródło

Odpowiedzi:

58

Zwykły plik to plik, który nie jest katalogiem ani bardziej egzotycznymi rodzajami „specjalnych” plików, takich jak nazwane potoki, urządzenia, gniazda, drzwi itp. Dowiązania symboliczne również nie są zwykłymi plikami, ale zachowują się jak cel, gdy aplikacja uzyskuje dostęp do zawartości pliku.

Zdałeś root@IP:jako źródło kopii i /path/to/picture.jpgjako miejsce docelowe. Źródłem jest katalog domowy użytkownika rootna komputerze IP. Jest to przydatne jako miejsce docelowe, ale nie jako źródło. To, co wpisałeś, wymagało skopiowania katalogu do pliku; scpnie może skopiować katalogu, chyba że poprosisz o kopię rekurencyjną z -ropcją (i odmówiłoby to zastąpienia istniejącego pliku katalogiem nawet z -r, ale po cichu nadpisałby zwykły plik, jeśli źródłem był zwykły plik).

Jeśli /path/to/picture.jpgjest to ścieżka na zdalnym komputerze pliku, który chcesz skopiować, musisz przykleić nazwę pliku do specyfikacji hosta. Jest to dwukropek, :który oddziela nazwę hosta od zdalnej ścieżki. Musisz także określić miejsce docelowe.

scp root@IP:/path/to/picture.jpg /some/destination

Jeśli chcesz skopiować plik lokalny /path/to/picture.jpgna zdalny host, musisz zamienić argumenty. Polecenia kopiowania w systemie Unix umieszczają źródło (źródła) na pierwszym miejscu, a miejsce docelowe na końcu.

scp /path/to/picture.jpg root@IP:

Jeśli chcesz skopiować plik zdalny /path/to/picture.jpgdo tej samej lokalizacji lokalnie, musisz powtórzyć ścieżkę. Możesz sprawić, żeby twoja powłoka powtarzała za ciebie (mniej pisania, mniej czytelności).

scp root@IP:/path/to/picture.jpg /path/to/picture.jpg
scp {root@IP:,}/path/to/picture.jpg
Gilles
źródło
2
upewnij się, że nie ma spacji między nazwą hosta a plikiem
Chris
Po przeczytaniu tego czuję się niesamowicie głupio. źródło, cel! Hه!
Chaim Eliyah
112

Podczas kopiowania katalogu należy skorzystać z -ropcji:

scp -r root@IP:/path/to/file /path/to/filedestination
użytkownik48435
źródło
1
Chociaż zaakceptowana odpowiedź technicznie odpowiada na rzeczywiste pytanie, ta odpowiedź jest najprawdopodobniej tym, czego szukają ludzie, którzy odwiedzają tę stronę.
cgnorthcutt
4

problem ze składnią - usuń spację między

root @ IP:

i

/ścieżka

czai się
źródło
Ale wtedy nie masz już celu scp.
Bernhard
tak. Nacisnąłem klawisz Enter zbyt szybko i brakuje przedstawiciela, aby to naprawić. zaskoczony, że mogę tu nawet komentować. Twoje zdrowie.
lurker
2
Myślę, że zawsze możesz komentować własne wypowiedzi i myślałem, że zawsze możesz je edytować?
Bernhard
Nie sądzę, że może to spowodować ten błądnot a regular file
HISI
@hisi użyj -rjako argumentu scp.
Ankur Loriya
2

scp root@IP:/path/to/file /path/to/filedestination

Powyższe polecenie kopiuje plik ze zdalnego serwera na komputer. Jeśli wpiszesz tylko scp root@IP:, spróbuje skopiować katalog domowy root (użytkownicy domowi scp .).

Musisz więc podać dokładną ścieżkę do pliku

Manula Waidyanatha
źródło
To zadziałało. Wielkie dzięki, stary. Tak trzymaj!
JeffM
2

Otrzymujesz ten błąd, ponieważ próbujesz skopiować folder, a nie plik, dlatego powinieneś kopiować pliki rekurencyjnie, używając -ropcji

Użyj poniższego polecenia podczas kopiowania plików z komputera zdalnego na komputer lokalny

scp -r root@RemoteIP:/path/to/file /path/to/filedestination

LUB

Podczas kopiowania plików z komputera lokalnego na komputer zdalny

scp -r /path/to/file root@RemoteIP:/path/to/filedestination
Yogesh Darji
źródło
0
scp root@IP:/path/to/*.jpg  /path/to/filedestination/

To zadziała (przynajmniej na moim Macu)

użytkownik253616
źródło