linux Copia la struttura delle cartelle(senza file) da una posizione a un'altra




linux copy file (9)

cd /path/to/directories &&
find . -type d -exec mkdir -p -- /path/to/backup/{} \;

Voglio creare un clone della struttura del nostro file server multi-terabyte. So che cp -parents può spostare un file e la sua struttura genitoriale, ma esiste un modo per copiare la struttura della directory intatta?

Voglio copiare su un sistema Linux e il nostro file server è montato sul CIFS.


Answer #1

Sostituire target_dir e source_dir con i valori appropriati:

cd target_dir && (cd source_dir; find . -type d ! -name .) | xargs -i mkdir -p "{}"

Testato su OSX + Ubuntu.


Answer #2

Non so se stai cercando una soluzione su Linux. Se è così, puoi provare questo:

$ mkdir destdir
$ cd sourcedir
$ find . -type d | cpio -pdvm destdir

Answer #3

La seguente soluzione ha funzionato bene per me in vari ambienti:

sourceDir="some/directory"
targetDir="any/other/directory"

find "$sourceDir" -type d | sed -e "s?$sourceDir?$targetDir?" | xargs mkdir -p

Answer #4

Questo risolve anche il problema con gli spazi bianchi:

Nella dir originale / di origine:

find . -type d -exec echo "'{}'" \; > dirs2.txt

quindi ricrearlo nella dir appena creata:

mkdir -p <../<SOURCEDIR>/dirs2.txt

Answer #5

Uno script Python di Sergiy Kolodyazhnyy pubblicato su Copia solo cartelle e non file? :

#!/usr/bin/env python
import os,sys
dirs=[ r for r,s,f in os.walk(".") if r != "."]
for i in dirs:
    os.makedirs(os.path.join(sys.argv[1],i)) 

o dalla shell:

python -c 'import os,sys;dirs=[ r for r,s,f in os.walk(".") if r != "."];[os.makedirs(os.path.join(sys.argv[1],i)) for i in dirs]' ~/new_destination

FYI:



Answer #7

Ecco una soluzione semplice utilizzando rsync:

rsync -av -f"+ */" -f"- *" "$source" "$target"
  • una linea
  • nessun problema con gli spazi
  • preservare le autorizzazioni

Ho trovato questa soluzione lì


Answer #8

Questo funziona:

find ./<SOURCE_DIR>/ -type d | sed 's/\.\/<SOURCE_DIR>//g' | xargs -I {} mkdir -p <DEST_DIR>"/{}"

Basta sostituire SOURCE_DIR e DEST_DIR.





folders