Olhe para a resposta de Stephane para o melhor método, dê uma olhada na minha resposta por razões para não usar as soluções mais óbvias (e razões pelas quais elas não são as mais eficientes).
Você pode usar a -I
opção de xargs
:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Que funciona em um mecanismo semelhante ao find
e {}
. Eu também citaria seu -name
argumento (porque um arquivo que começa com x
o diretório atual seria envolto em um arquivo e passado como argumento a ser encontrado - o que não dará o comportamento esperado!).
No entanto, conforme indicado pelo manatwork, conforme detalhado na xargs
página do manual:
-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.
O importante a ser observado é que isso -L 1
significa que apenas uma linha de saída find
será processada por vez. Isso significa que é sintaticamente o mesmo que:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(que executa uma única mv
operação para cada arquivo).
Mesmo usando o -0
argumento GNU xargs e o find -print0
argumento causa exatamente o mesmo comportamento de -I
- isto é para clone()
um processo para cada arquivo 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/
, mas como homem diz, que “implica-x
e-L 1
.” Então, nenhum ganho. Melhor mantê-lo simples e usofind . -exec mv '{}' ~/play/ \;