Jak przenieść wszystkie pliki wyjściowe z polecenia?

22

Mam to polecenie grep, aby znaleźć pliki bez słowa Załączniki.

grep -L -- Attachments *

Chcę przenieść wszystkie pliki, które są wyprowadzane z tego polecenia. Jak to zrobić w bash? Czy używam fajki? Czy używam bardziej skomplikowanej instrukcji if / then w pełnym skrypcie?

bernie2436
źródło

Odpowiedzi:

18

Jeśli wiesz, że nie, jeśli nazwy plików zawierają nowe linie, tabulatory, spacje lub kombinacje globów, które mogą dawać dopasowanie, może to być łatwiejsze w przypadku jednorazowego zdarzenia:

mv $(grep -L Attachments *) dest_dir
Graeme
źródło
36

Co chcesz zrobić, to użyć rury i greps -Zopcja:

Korzystanie z GNU grep i mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

W -Zpołączeniu z xargs -0obsługuje dowolne nazwy plików ze znakami specjalnymi.

Korzystanie z BSD grep i mv (jak w MacOS X)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

Na BSD grep -Zoznacza dekompresję , grep --nulldziała zarówno na BSD, jak i GNU. BSD mvnie ma opcji-t

Anthon
źródło