Regardez la réponse de Stéphane pour la meilleure méthode, regardez ma réponse pour des raisons de ne pas utiliser les solutions les plus évidentes (et les raisons pour lesquelles elles ne sont pas les plus efficaces).
Vous pouvez utiliser l' -I
option de xargs
:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Qui fonctionne dans un mécanisme similaire à find
et {}
. Je citerais également votre -name
argument (car un fichier commençant par x
dans le répertoire actuel serait globalisé et passé en argument à rechercher - ce qui ne donnera pas le comportement attendu!).
Cependant, comme l'a souligné Manatwork, comme détaillé dans la xargs
page de manuel:
-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.
La chose importante à noter est que cela -L 1
signifie qu'une seule ligne de sortie find
sera traitée à la fois. Cela signifie que c'est syntaxiquement le même que:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(qui exécute une seule mv
opération pour chaque fichier).
Même en utilisant l' -0
argument GNU xargs et l' find -print0
argument provoque exactement le même comportement de -I
- il s'agit d' clone()
un processus pour chaque fichier 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
:find . | xargs -I'{}' mv '{}' ~/play/
, mais comme homme dit que « Implique-x
et-L 1
. » Donc , pas de gain. Mieux vaut rester simple et utiliserfind . -exec mv '{}' ~/play/ \;