pliki mv z | xargs

18

Próbuję tylko przenieść kilka plików (nie dowiązań symbolicznych) z mojego folderu / etc / apache / sites do folderu / etc / apache / sites-available z następującymi elementami:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

ale jestem Ubuntu n00b i otrzymuję ten błąd:

mv: target `./real-file' is not a directory

gdzie „plik rzeczywisty” to plik testowy, który skonfigurowałem w moim środowisku programistycznym. Próbuję uporządkować czyjś bałagan na serwerze produkcyjnym ;-)

Obrabować
źródło

Odpowiedzi:

27

Możesz wypróbować -execopcję z findpoleceniem,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Do przenoszenia plików należących do roota potrzebujesz sudouprawnień.

Jeśli chcesz użyć xargspolecenia, dodaj -Ido niego opcję.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/
Avinash Raj
źródło
7

Idealnie powinieneś użyć -print0 z find, więc nazwy plików ze spacjami nie psują rzeczy.

Np. Powinno to działać:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory
David Goodwin
źródło
0

możesz także użyć innego sposobu, aby wykonać to samo, ale z dodatkową wydajnością :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Zauważ, że kończy się na tym, \+co oznacza polecenie find, aby uzyskać wynik i rozwinąć się do {}robienia tego, co chcesz, w ten sposób unikniesz dwóch opcji ( \;= dla każdego wpisu ORAZ potokowania do nowego polecenia xargs)

Oto wyjaśnienie (możesz również sprawdzić instrukcję man find)

-exec polecenie {} + Ten wariant akcji -exec uruchamia określone polecenie na wybranych plikach, ale linia poleceń jest budowana przez dołączenie każdej wybranej nazwy pliku na końcu; całkowita liczba wywołań polecenia będzie znacznie mniejsza niż liczba dopasowanych plików. Wiersz poleceń jest budowany w taki sam sposób, jak xargs buduje wiersze poleceń. W poleceniu dozwolona jest tylko jedna instancja „{}”. Polecenie jest wykonywane w katalogu startowym.

gonzalesraul
źródło