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?

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

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

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.