GNU/Linux >> Linux Esercitazione >  >> Linux

cp solo file, saltando le directory

Ti suggerisco di usare rsync invece di cp, se puoi ha l'opzione -m che escluderà le cartelle vuote, esempio:

rsync -am <origin> <destination>

Spiegazione del comando in describeshell.com

Sto usando l'opzione -a perché esegue molte belle azioni predefinite, ma se vuoi puoi anche usare l'opzione -r, che imposterà solo la modalità ricorsiva.

[AGGIUNGI commento]

Non conosco un modo per farlo con cp, almeno la pagina man non mostra alcuna opzione che lo farà per te. Probabilmente puoi fare una soluzione più complessa usando il comando find per trovare l'elenco di file/directory da copiare, quindi passarlo a cp, ma sarebbe molto più complicato di rsync. rsync è anche praticamente standard in molti Linux


cp in effetti non ha un'opzione per ottenere solo i file, ma come ha detto berserck, puoi usare find insieme a cp . In effetti, questo è molto semplice:

# Copy only files
find /path/to/file -type f -execdir cp "{}" /dest/path ";"

Oppure:

# Copy everything except directories
find /path/to/file -not -type d -execdir cp "{}" /dest/path ";"

Spiegazione

find è lo strumento che cercherà i file desiderati. Nella prima opzione, impostiamo -type f per restituire solo file regolari. Nella seconda opzione, impostiamo -not -type d per ottenere tutto tranne le directory. find esegue gli argomenti passati a -execdir sostituendo {} con una voce di risultato alla volta e interrompe il comando quando ; viene trovato (; dovrebbe essere sfuggito a \; o ";" , o la shell potrebbe espanderlo).

-execdir eseguirà il comando avendo come "directory di lavoro" la cartella del file ed è preferibile invece di -exec , controlla sotto.

Il -type documentazione delle opzioni:

-digitare c

Il file è di tipo c:

b:blocco (bufferizzato) speciale

c:carattere (senza buffer) speciale

d:cartella

p:pipe con nome (FIFO)

f:file normale

l:legame simbolico; questo non è mai vero se è attiva l'opzione -L o l'opzione -follow, a meno che il collegamento simbolico non sia interrotto. Se vuoi cercare collegamenti simbolici quando -L è attivo, usa -xtype.

s:presa

D:porta (Solaris)

Il -not documentazione delle opzioni:

! espr

Vero se expr è falso. Questo carattere di solito necessita anche di protezione dall'interpretazione da parte della shell.

-not espr

Uguale a ! expr, ma non conforme a POSIX.

Il -execdir documentazione delle opzioni:

-exec comando;

Esegui comando; true se viene restituito lo stato 0. Tutti i seguenti argomenti da trovare sono considerati argomenti del comando fino a quando un argomento consiste di ';' si incontra. La stringa '{}' viene sostituita dal nome del file corrente in elaborazione ovunque ricorra negli argomenti del comando [...]. Potrebbe essere necessario eseguire l'escape di entrambe queste costruzioni (con un '\') o citarle per proteggerle dall'espansione da parte della shell. Il comando specificato viene eseguito una volta per ogni file corrispondente. Il comando viene eseguito nella directory iniziale. Ci sono inevitabili problemi di sicurezza che circondano l'uso dell'azione -exec; dovresti usare invece l'opzione -execdir.

-execdir comando;

Come -exec, ma il comando specificato viene eseguito dalla sottodirectory contenente il file corrispondente , che normalmente non è la directory in cui hai iniziato a trovare. Questo è un metodo molto più sicuro per richiamare i comandi, in quanto evita race condition durante la risoluzione dei percorsi dei file corrispondenti. [...] Se usi questa opzione, devi assicurarti che la tua variabile d'ambiente $PATH non faccia riferimento a '.'; in caso contrario, un utente malintenzionato può eseguire qualsiasi comando desideri lasciando un file con un nome appropriato in una directory in cui verrà eseguito -execdir. Lo stesso vale per le voci in $PATH che sono vuote o che non sono nomi di directory assoluti.

https://linux.die.net/man/1/find


Linux
  1. Trova file e directory su Linux con il comando find

  2. Comando Linux:come "trovare" solo file di testo?

  3. Rimuovi solo i file nella directory su Linux NOT directory

  4. Comando di decompressione di Linux:opzione per forzare la sovrascrittura?

  5. Il comando 'ls -d' non visualizza le directory. C'è un modo per fare in modo che "ls" visualizzi solo le directory invece di file e directory?

Come utilizzare il comando cp per copiare file e directory

Come rinominare file e directory in Ubuntu 20.04

4 modi per trasferire file e directory su Linux

Comando Stat:Visualizza gli attributi di file e directory

Come elencare solo le directory in Linux

comando ls in Linux/UNIX