Ich möchte eine Gruppe von Dateien in einen Zielordner kopieren. Aber ohne cp
für jeden Vorgang eine neue Instanz erstellen zu müssen.
Das Argumentformat cp
scheint 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 cp
und es seine Arbeit machen lassen. xargs
Das 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 filelist
enthält
apple
orange
banana
fruity
wobei 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 print0
oder finden:
cat filelist |perl -p -e 's/\n/\000/' |xargs -0 cp --target-directory dest_dir/
Dieses Beispiel umfasst xargs -0
:--target-directory