Когда я запускаю следующую команду:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Я получаю сотни строк, которые говорят:
mv: target `/foo/bar/XX.csv` is not a directory
Почему? Я думал, что xargs выполнит:
mv /foo/barXX.csv some_dir
для каждого файла, который find
находит. В чем дело? Кстати, это с Zsh
Обновить:
Update1:
Я старался:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
но потом я получил несколько строк вроде:
mv: cannot stat `{}': No such file or directory
хотя я думаю, что команда перемещает мои файлы правильно.
Update2:
Мне кажется, мне не нужна эта -t
опция при использовании в mv
одиночку. Например
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
работает хорошо. Зачем мне нужно -t
при использовании xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
так, что аргументы файла являются последними. Это ошибка в вопросе, чтобы использовать,{}
вы должны перейти-I {}
кxargs
.-t
несколько файлов и каталог с обычнымmv
?mv -t
.Вы также можете использовать команду ls вместо команды find:
источник