Quando executo o seguinte comando:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Eu recebo centenas de linhas que dizem:
mv: target `/foo/bar/XX.csv` is not a directory
Por quê? Eu pensei que xargs iria executar:
mv /foo/barXX.csv some_dir
para cada arquivo que find
encontrar. O que está acontecendo? By the way, isso é com zsh
Atualizar:
Update1:
Eu tentei:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
mas então eu tenho algumas linhas como:
mv: cannot stat `{}': No such file or directory
embora eu ache que o comando esteja movendo meus arquivos corretamente.
Update2:
Parece que não preciso da -t
opção ao usar mv
sozinho. Por exemplo
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
funciona bem. Por que eu preciso -t
ao usar xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
para que os argumentos do arquivo sejam os últimos. Esse é o erro na pergunta, a fim de usar{}
você tem que passar-I {}
paraxargs
.-t
vários arquivos e um diretório com um arquivo regularmv
?mv -t
.Você também pode usar o comando ls em vez do comando find:
fonte