Schauen Sie sich Stephanes Antwort für die beste Methode an und meine Antwort aus Gründen, die naheliegenderen Lösungen nicht zu verwenden (und aus Gründen, warum sie nicht die effizientesten sind).
Sie können folgende -IOptionen verwenden xargs:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Welches funktioniert in einem ähnlichen Mechanismus wie findund {}. Ich würde auch Ihr -nameArgument zitieren (weil eine Datei, die mit xim vorliegenden Verzeichnis beginnt, dateiglobiert und als zu suchendes Argument übergeben würde - was nicht das erwartete Verhalten ergibt!).
Wie jedoch durch manatwork ausgeführt, wie in der xargsManpage beschrieben:
-I replace-str
Replace occurrences of replace-str in the initial-arguments with
names read from standard input. Also, unquoted blanks do not
terminate input items; instead the separator is the newline
character. Implies -x and -L 1.
Die wichtige Sache zu beachten ist , dass -L 1Mittel , die nur eine Zeile der Ausgabe von findzu einem Zeitpunkt bearbeitet werden. Das heißt, das ist syntaktisch dasselbe wie:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(der eine einzelne mvOperation für jede Datei ausführt ).
Sogar die Verwendung des GNU- -0Arguments xargs und des find -print0Arguments verursacht genau dasselbe Verhalten von -I- dies ist clone()ein Prozess für jede Datei mv:
find . -name "x*" -print0 | strace xargs -0 -I '{}' mv '{}' /tmp/other
.
.
read(0, "./foobar1/xorgslsala11\0./foobar1"..., 4096) = 870
mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb82fad000
open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26066, ...}) = 0
mmap(NULL, 26066, PROT_READ, MAP_SHARED, 3, 0) = 0x7fbb82fa6000
close(3) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 661
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 661
--- SIGCHLD (Child exited) @ 0 (0) ---
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 662
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 662
--- SIGCHLD (Child exited) @ 0 (0) ---
.
.
.
-I: verwendenfind . | xargs -I'{}' mv '{}' ~/play/, aber wie der Mensch sagt, bedeutet das "-xund-L 1". Also kein Gewinn. Besser einfach halten und verwendenfind . -exec mv '{}' ~/play/ \;