Kopieren einer gesamten Verzeichnisstruktur und/oder eines Skeletts

Kopieren einer gesamten Verzeichnisstruktur und/oder eines Skeletts

Wie kopieren wir eine komplette Verzeichnisvorlage/-struktur oder ein Skelett?
Als nichts verwendete Anweisung:

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

  -a, --archive                same as -dR --preserve=all
      --attributes-only        don't copy the file data, just the attributes
      --backup[=CONTROL]       make a backup of each existing destination file
  -b                           like --backup but does not accept an argument
      --copy-contents          copy contents of special files when recursive
  -d                           same as --no-dereference --preserve=links
  -f, --force                  if an existing destination file cannot be
                                 opened, remove it and try again (this option
                                 is ignored when the -n option is also used)
  -i, --interactive            prompt before overwrite (overrides a previous -n
                                  option)
  -H                           follow command-line symbolic links in SOURCE
  -l, --link                   hard link files instead of copying
  -L, --dereference            always follow symbolic links in SOURCE
  -n, --no-clobber             do not overwrite an existing file (overrides
                                 a previous -i option)
  -P, --no-dereference         never follow symbolic links in SOURCE
  -p                           same as --preserve=mode,ownership,timestamps
      --preserve[=ATTR_LIST]   preserve the specified attributes (default:
                                 mode,ownership,timestamps), if possible
                                 additional attributes: context, links, xattr,
                                 all
      --no-preserve=ATTR_LIST  don't preserve the specified attributes
      --parents                use full source file name under DIRECTORY
  -R, -r, --recursive          copy directories recursively
      --reflink[=WHEN]         control clone/CoW copies. See below
      --remove-destination     remove each existing destination file before
                                 attempting to open it (contrast with --force)
      --sparse=WHEN            control creation of sparse files. See below
      --strip-trailing-slashes  remove any trailing slashes from each SOURCE
                                 argument
  -s, --symbolic-link          make symbolic links instead of copying
  -S, --suffix=SUFFIX          override the usual backup suffix
  -t, --target-directory=DIRECTORY  copy all SOURCE arguments into DIRECTORY
  -T, --no-target-directory    treat DEST as a normal file
  -u, --update                 copy only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
  -x, --one-file-system        stay on this file system
  -Z                           set SELinux security context of destination
                                 file to default type
      --context[=CTX]       like -Z, or if CTX is specified then set the SELinux 
                            or SMACK security context to CTX

Bitte geben Sie eine gute Anleitung

Antwort1

Wenn Sie nur Dateien vom Typ kopieren möchtenVerzeichnis, rekursiv und nicht die anderen Dateitypen, die Sie verwenden können pax(Standard, kann aber nicht mit beliebigen Dateinamen umgehen, es sei denn, Sie verwenden nicht standardmäßige Erweiterungen, und ich kenne keine Open Source-Implementierung, die kompatibel ist oder mit beliebigen Dateinamen umgehen kann) oder cpio/ tar(üblich, aber mit unterschiedlicher Syntax zwischen den Implementierungen, und nicht alle können mit beliebigen Dateinamen umgehen oder alle Metadaten kopieren) oder rsync(nur eine Implementierung, aber im Allgemeinen nicht standardmäßig installiert).

Um beispielsweise die Struktur (einschließlich Metadaten, sofern möglich) aus dem $srcVerzeichnis in das $dstfolgende Verzeichnis zu duplizieren:

Mit libarchive bsdtar:

(
  cd -P -- "$src" &&
    find . -type d -print0 | bsdtar --null -T - -cnf -
) | (cd -P -- "$dst" && bsdtar -xpSf -)

Mit rsync:

rsync -aAX --include='*/' --exclude='*' -- "$src/" "$dst/"

Beachten Sie, dass einige Metadaten nur rootkopiert werden können (wahrscheinlich Eigentumsrechte und einige erweiterte Attribute). Weitere Informationen finden Sie in der Dokumentation -Xauf der rsyncManpage darüber, welche erweiterten Attribute beibehalten werden.

verwandte Informationen