Kann Linux bestimmte Dateien auch aus einer Textliste von Dateien in Unterverzeichnisse cp-en?

Kann Linux bestimmte Dateien auch aus einer Textliste von Dateien in Unterverzeichnisse cp-en?

Ich bitte um Ihre Hilfe bei der Lösung meines Problems, da ich nicht weiterkomme. Ich erkläre Ihnen die Situation: Ich möchte Dateien, deren Pfad ich in einer txt-Datei habe, in bestimmte Unterverzeichnisse kopieren, die in einer zweiten Datei angegeben sind (ich habe auch eine vollständige CSV-Datei mit diesen beiden Spalten: Name der Unterverzeichnisse ( $value1), Dateipfad ( $value2))

Mit diesem Befehl konnte ich die Unterverzeichnisse automatisch erstellen:

xargs mkdir -p </scripts/repertoires.csv

Ich weiß, wie man mit diesem Befehl alle Dateien in ein einziges Verzeichnis kopiert:

cat /scripts/fichiers.csv | xargs -I% cp% / destinationfolder

Aber ich kann nicht jede Zeile kopieren, die einer Datei in dem entsprechenden Unterverzeichnis entspricht. Um es klarer auszudrücken: Ich möchte $value2in /Zielordner/ kopieren.$value1

Antwort1

Ich habe dies in der Vergangenheit so gemacht, dass ich tareine Art Vermittler eingesetzt habe. Ich bin jedoch sicher, dass es elegantere Antworten gibt.

Hier haben wir eine Liste von Dateien, die bestimmte Kriterien erfüllen, z. B.:alle Dateien in /usr kleiner als 1M

$ find /usr -type f -size -1M

Das möchten wir an den Speicherort kopieren /mnt/dst.

Sie können tar als Vektor zum Packen/Entpacken der Daten verwenden. IE

$ find /usr -type f -size -1M | tar --files-from=- -c | tar -xv -C /mnt/dst

Das erste tarnimmt das --files-from, das eine zeilenweise Liste der vollständigen Pfade zu Dateien erwartet, und erstellt ein Tarball in stdout.

Der zweite tarwechselt zum Zielpfad -Cund entpackt das von der Pipe empfangene Tarball.

Dies führt zu folgender Ausgabe (bei Verwendung -vim zweiten Tar-Befehl).

usr/lib/grub/i386-pc/fdt.lst
usr/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py
usr/lib/python3.6/site-packages/pip/operations/__init__.py
usr/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py
usr/lib/python3.6/site-packages/setuptools/_vendor/__init__.py
usr/lib/python3.6/site-packages/slip/__init__.py
usr/lib/python3.6/site-packages/slip/_wrappers/__init__.py
usr/lib/python3.6/site-packages/asn1crypto/_perf/__init__.py
...
...

Das resultierende Zielverzeichnis erzeugt den (zur besseren Lesbarkeit beschnittenen) Baum, der das enthalten sollte, wonach Sie suchen.

# tree -L 3 /mnt/dst
/mnt/dst
└── usr
    ├── lib
    │   ├── grub
    │   ├── node_modules
    │   └── python3.6
    ├── lib64
    │   └── python3.6
    ├── local
    │   └── share
    └── share
        ├── crypto-policies
        ├── doc
        ├── groff
        ├── microcode_ctl
        ├── mime
        ├── pki
        ├── texlive
        ├── texmf
        ├── vim
        └── X11

20 directories, 0 files

verwandte Informationen