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 -I
Optionen verwenden xargs
:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Welches funktioniert in einem ähnlichen Mechanismus wie find
und {}
. Ich würde auch Ihr -name
Argument zitieren (weil eine Datei, die mit x
im 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 xargs
Manpage 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 1
Mittel , die nur eine Zeile der Ausgabe von find
zu einem Zeitpunkt bearbeitet werden. Das heißt, das ist syntaktisch dasselbe wie:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(der eine einzelne mv
Operation für jede Datei ausführt ).
Sogar die Verwendung des GNU- -0
Arguments xargs und des find -print0
Arguments 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 "-x
und-L 1
". Also kein Gewinn. Besser einfach halten und verwendenfind . -exec mv '{}' ~/play/ \;