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 ;-)

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/

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.