Mam plik zawierający nazwy plików. Na przykład:
/tmp/list.txt
(ze spacjami na początku każdej linii):
/tmp/file.log
/app/nir/home.txt
/etc/config.cust
Chcę, używając jednego wiersza, aby przenieść wszystkie pliki wymienione w /tmp/list.txt
celu/app/dest
Powinno to być coś takiego:
cat /tmp/list.txt | xargs mv /app/dest/
Zakładając, że twoje nazwy plików są względnie rozsądne (bez nowych znaków lub dziwnych znaków):
Aby poradzić sobie z dziwnymi nazwami plików (psuje się, jeśli nazwa pliku ma nowy wiersz):
źródło
cp -Hr
ale nie wiem, czy OSX tocp
obsługuje.źródło
Czyste xargs czytające bezpośrednio z pliku
edycja 1 - po komentarzu @Anthon poniżej,
źródło
-i
jest przestarzałe i zastępuje-sugeruje-l
/--max-lines=1
. I powoduje,mv
że jest wykonywany dla każdego pliku osobno.(spacje na początku są ignorowane)
źródło