xargs und cp: mehrfache Erweiterung im Find-Stil „{}+“?

xargs und cp: mehrfache Erweiterung im Find-Stil „{}+“?

Ich möchte eine Gruppe von Dateien in einen Zielordner kopieren. Aber ohne cpfür jeden Vorgang eine neue Instanz erstellen zu müssen.

Das Argumentformat cpscheint zu sein:

cp src_file1 src_file2 src_file3 dest_dir/

Angenommen, ich habe eine Datei mit zeilenweise aufgelisteten Quelldateinamen. Wie kann dies erledigt werden?

Da ich eine sehr große Anzahl von Dateien habe, wird die Idee von @Scott unten nicht funktionieren, da sie die maximale Befehlszeilenlänge erreichen würde.

Ich würde diese Datei mit den Dateinamen gerne irgendwie weiterleiten cpund es seine Arbeit machen lassen. xargsDas scheint aber auch nicht zu helfen, da es die Erweiterung am Ende der Befehlszeile anhängen möchte.

Ist das möglich?

Danke

Antwort1

Wenn filelistenthält

apple
orange
banana

fruitywobei dies die Namen der Dateien sind, die Sie in das Verzeichnis kopieren möchten , geben Sie ein

cp `cat filelist` fruity

/Das brauchen Sie am Ende nicht .

Warnung: Dies funktioniert nicht, wenn einer der Dateinamen Leerzeichen enthält, z. B. passion fruit.

Antwort2

Simulieren print0oder finden:

cat filelist |perl -p -e 's/\n/\000/' |xargs -0 cp --target-directory dest_dir/

Dieses Beispiel umfasst xargs -0:--target-directory

verwandte Informationen