Come fare scp per copiare file nascosti?


63

Uso spesso SCP per copiare i file, in particolare i file relativi al Web. Il problema è che ogni volta che lo faccio, non riesco a ottenere il mio comando per copiare file nascosti (ad esempio .htaccess).

In genere invoco questo:

scp -rp src/ user@server:dest/

Questo non copia file nascosti. Non voglio invocarlo di nuovo (facendo qualcosa di simile scp -rp src/.* ...- e che ha comunque strani .e ..implicazioni.

Non ho visto nulla nella scppagina man di un "include file nascosti".

Come posso ottenere questo?


Presumo che src/.*copi anche src/..(la directory principale), giusto?
Ken Sharp,

Risposte:


67

Ciò dovrebbe assolutamente corrispondere ai file nascosti. Il / alla fine della fonte dice "ogni file in questa directory". Tuttavia, test e ricerche ti confermano. Questo è un comportamento stupido.

La " risposta " è di aggiungere un punto alla fine della fonte:

scp -rp src/. user@server:dest/

La vera risposta è usare rsync.


Bel trucco non me ne sono ancora reso conto.
cstamas,

21
rsync -avz -e ssh --progress src / user @ server: dest /
MikeyB

2
Non riesco a riprodurre quel comportamento. scp -r source/ host:source2copia file di punti. Funziona in OpenSSH 5.1 dal 2007.
Mikel

3
Si noti che l'aggiunta di un .alla fine non funziona più (2019) a causa di problemi di sicurezza. Questo è spiegato qui: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane

25

Puoi provare rsync. È più adatto per questo lavoro:

rsync -av src / user @ server: dest /

(E la sua pagina di manuale vale la pena leggere.)


2
Ho sempre utilizzare l'opzione --progress per rsync, non posso vivere senza di essa = D
Hofa

1
@Hofa di solito uso -P perché è più corto, include già --progress e include anche --partial che può avere senso se sono già interessato ai suoi progressi ;-)
cstamas

9

Non inserire una barra dopo la directory di origine. Il tuo codice sarebbe simile al seguente:

scp -rp src user@server:dest/

Questo creerà una directory 'src' sotto 'dest' sul computer remoto, con tutti i file nascosti inclusi. Probabilmente non è esattamente quello che vuoi, ma copierà i file nascosti in src.


3

Quanto segue risolverà il problema, questo è stato completamente testato sul nostro ambiente di integrazione continua

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

Spero che sia d'aiuto


Dopo aver aggiornato scp di recente, questo risulta ora scp: error: unexpected filename: . . Assicurati di verificare se funziona con la tua distribuzione, amico Googler :)
Moritz Friedrich,

1

Per copiare solo i file nascosti, utilizzare questo comando

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

Il gioco effettivo è il /.[!.]*tag che si riferisce ai file che iniziano con .(nascosto)


0

Nessuna delle soluzioni SCP sopra ha funzionato per me. Tuttavia, ho scoperto che quanto segue ha funzionato su cygwin: scp -r directory / * host: directory Il '*' corrispondeva a tutti i file visibili e ha saltato l'invisibile.


0

Se l'accesso con password è disabilitato sul computer remoto e l'unico modo per accedere è tramite chiave pubblica, è possibile utilizzare questo:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

Copia anche i file nascosti.

Si noti inoltre che "user1" deve disporre delle autorizzazioni per leggere tali file, ad esempio non è possibile copiare cartelle ssh di altri utenti con questo metodo.


0

Poiché scpsupporta le espressioni regolari, questo farà sicuramente il trucco per te:

scp -rp src/(*|.*) user@server:dest/


0

Il controllo di revisione distribuito gestisce i file nascosti

A causa della vulnerabilità CVE-2018-20685, il /.trucco non può più essere utilizzato con scp. Tuttavia, il controllo di revisione distribuito come gito Hg Mecurial gestirà i file nascosti come qualsiasi altro file. Ecco i comandi per il mio Hg Mercurial preferito :

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

Le modifiche successive dovranno essere impegnate nuovamente con client:$ hg com -m "commit message"e quindi inviate utilizzando il client:$ hg pushcomando. Scopri di più sull'invio delle modifiche da questo cheat sheet di Hg Mercurial .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.