GNU/Linux >> Linux Esercitazione >  >> Linux

Copia tipi di file specifici mantenendo la struttura delle directory in Linux

Qualche tempo fa abbiamo imparato a copiare determinati tipi di file da una directory all'altra in Linux. Oggi faremo lo stesso ma conserveremo anche la struttura delle directory. Questo breve tutorial spiega come copiare tipi di file specifici mantenendo la struttura delle directory in Linux. Qui ho indicato due modi diversi per farlo. Scegli quello che fa per te.

Copia tipi di file specifici mantenendo la struttura delle directory in Linux

Immagina questo scenario.

Ho una directory chiamata "Linux" con diversi tipi di file salvati in diverse sottodirectory. Dai un'occhiata alla seguente struttura di directory:

$ tree Linux/
Linux/
├── dir1
│   ├── English
│   │   └── Kina - Can We Kiss Forever.mp3
│   ├── Instrumental
│   │   └── Chill Study Beats.mp3
│   └── Tamil
│       ├── Kannan Vanthu.mp3
│       └── yarenna.mp3
├── dir2
│   ├── file.docx
│   └── Raja Raja Chozan Naan.mp3
├── dir3
│   ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3
│   └── pic.jpg
└── dir4
    ├── Aaruyirae.mp3
    └── video.mp4

7 directories, 10 files

Elenca il contenuto della directory usando il comando tree

Come puoi vedere nella struttura delle directory sopra, Linux directory ha quattro sottodirectory:dir1 , dir2 , dir3 e dir4 . Il mp3 i file sono sparsi in tutte e quattro le sottodirectory. Ora voglio copiare tutti gli mp3 file in un'altra directory denominata "otechnix" e voglio anche mantenere la stessa struttura di directory nella directory di destinazione.

Per prima cosa vedremo come farlo usando il comando "trova".

Metodo 1:utilizzo dei comandi "find" e "cp" o "cpio"

Vai alla directory di origine:

$ cd Linux/

E copia tutti i tipi di fie mp3 usando il comando "trova":

$ find . -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;

Analizziamo il comando precedente e vediamo cosa fa ciascuna opzione.

  • trova – comando per trovare file e cartelle in sistemi simili a Unix.
  • il punto (.) - rappresenta che copiamo i contenuti dalla directory corrente.
  • -iname '*.mp3' – cercare i file corrispondenti con estensione .mp3.
  • -exec cp – esegui il comando 'cp' per copiare i file dalla directory di origine a quella di destinazione.
  • --genitori - creare le directory padre intermedie se necessario per preservare la struttura della directory padre.
  • \{\} – viene automaticamente sostituito con il nome file dei file trovati dal comando 'trova'. E le parentesi graffe vengono salvate per proteggerle dall'espansione della shell in alcune versioni del comando "trova". Puoi anche utilizzare {} senza caratteri di escape.
  • ~/otechnix – directory di destinazione per salvare i file corrispondenti.
  • \; – indica che i comandi da eseguire sono ora completi, e di eseguire nuovamente il comando alla prossima partita.

Questo comando troverà e copierà tutti i file di tipo mp3 dalla directory ~/Linux alla directory ~/otechnix. Inoltre conserva la stessa struttura di directory nella directory di destinazione.

Puoi verificarlo utilizzando il comando "albero" in entrambe le posizioni come di seguito.

Elenca il contenuto della directory usando il comando tree in Linux

Come puoi vedere nell'output sopra, la directory di destinazione ha solo i file mp3 e la sua struttura di directory è la stessa della directory di origine.

Se lo stai facendo da qualche altra posizione, specifica il percorso completo della directory di origine come di seguito.

$ find ~/Linux -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;

Questo comando troverà tutto il file in Linux/ posizione e copiarli in otechnix/~/Linux/ .

Copia tipi di file specifici mantenendo la struttura delle directory in Linux

Se --genitori l'opzione non funziona, puoi combinare il comando trova con cpio comando per copiare i file mantenendo la struttura della directory.

$ find . -name '*.mp3' | cpio -pdm  ~/ostechnix

Ecco,

  • cpio - Comando per copiare file da e verso archivi.
  • -p - Leggere un elenco di nomi di file dallo standard input e copiarli nella directory specificata.
  • -d - Crea directory dove necessario.
  • -m - Conserva il tempo di modifica dei file.

Per maggiori dettagli, fare riferimento alle pagine man.

$ man find
$ man cp
$ man cpio

Lettura consigliata:

  • Come organizzare automaticamente tipi simili di file in cartelle specifiche

Metodo 2:utilizzo di Rsync

Risincronizzazione è un potente strumento utilizzato da/verso sistemi locali e remoti. Per copiare determinati tipi di file da una directory all'altra mantenendo la struttura della directory principale, eseguire:

$ rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix

Oppure,

$ rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix

Ecco,

  • rsync - strumento di copia file remota (e locale).
  • -a - modalità archivio per preservare quasi tutto (inclusi collegamenti simbolici, date di modifica, permessi dei file, proprietari ecc.)
  • -m, --prune-empty-dirs - elimina le directory vuote dall'albero dei sorgenti. Se vuoi includere directory vuote, rimuovi questa opzione dal comando precedente.
  • --include="*/" --include="*.mp3" --exclude="*" - Per includere solo file specifici, devi prima includere quei file specifici, quindi escludere tutti gli altri file. Nel nostro caso, abbiamo incluso i file *.mp3 ed escluso tutto il resto.
  • ~/Linux - Directory di origine.
  • ~/otechnix - Directory di destinazione.

Risultato di esempio:

Copia tipi di file specifici mantenendo la struttura delle directory utilizzando Rsync in Linux

Per maggiori dettagli, fare riferimento alle pagine man.

$ man rsync

Spero che questo aiuti.


Linux
  1. Linux:come si controllano le informazioni sulla struttura delle directory di un file Unix/linux?

  2. Come copiare una directory nella riga di comando di Linux [Suggerimento per principianti]

  3. comando Linux cp

  4. 6 Esempi di comandi mv per spostare o rinominare file e directory Linux

  5. comando linux per svuotare tutti i file di una directory

Comando Cp in Linux (copia file)

Du comando in Linux

Comando mv in Linux

Come visualizzare la struttura ad albero delle directory in Linux

Copia un file in più directory dalla riga di comando su Linux

Come eseguire il tar di tipi di file specifici (estensioni) in una directory