Po uruchomieniu następującego polecenia:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Dostaję setki linii, które mówią:
mv: target `/foo/bar/XX.csv` is not a directory
Dlaczego? Myślałem, że xargs wykona:
mv /foo/barXX.csv some_dir
dla każdego find
znalezionego pliku . Co się dzieje? Nawiasem mówiąc, to jest z Zsh
Aktualizacja:
Aktualizacja 1:
Próbowałem:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
ale potem mam kilka linii, takich jak:
mv: cannot stat `{}': No such file or directory
chociaż myślę, że polecenie poprawnie przenosi moje pliki.
Aktualizacja 2:
Wydaje mi się, że nie potrzebuję tej -t
opcji, kiedy korzystam mv
sam. Na przykład
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
działa dobrze. Dlaczego potrzebuję -t
podczas używania xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
tak, że argumenty pliku są ostatnie. To jest błąd w pytaniu, aby użyć{}
musisz przejść-I {}
doxargs
.-t
wielu plików i katalogu ze zwykłymmv
?mv -t
.Możesz także użyć polecenia ls zamiast polecenia find:
źródło