Mam wiele plików, które muszę spakować do jednego katalogu. Nie chcę spakować wszystkich plików w katalogu, ale tylko te pasujące do określonego zapytania.
Zrobiłem
grep abc file-* > out.txt
aby utworzyć plik ze wszystkimi wystąpieniami „abc” w każdym pliku. Potrzebuję samych plików. Jak mogę powiedzieć bashowi, aby skompresował tylko te pliki?
grep abc file-* > out.txt
plik ze wszystkimi wystąpieniami „abc” w każdym pliku. Potrzebuję samych plików.zip ZipFile.zip file-*
, co jest oczywistym sposobem na zrobienie tego. Plik pośredni byłby potrzebny tylko wtedy, gdy korzystasz z kompleksufind
lub konkatenacji list plików z różnych wyszukiwań.Odpowiedzi:
Bardzo prosty:
Oznacza to, że jeśli
out.txt
plik zawiera jedną nazwę pliku w wierszu. Dodaje wszystkie pliki zout.txt
jednego archiwum o nazwiearchive.zip
.Te
-@
marki opcjazip
odczytu z stdin.Jeśli chcesz pominąć tworzenie
out.txt
pliku tymczasowego , możesz również skorzystaćgrep
z możliwości drukowania nazw plików.-r
włącza wyszukiwanie rekurencyjne (może nie być konieczne w twoim przypadku) i-l
drukuje tylko nazwy plików:źródło
cat out.txt | while read line ; do xargs zip archive.zip $line ; done
zip archive.zip $(ls common_name*)
-@
składnia opcji działa dobrze od 10.16, mimo że strona podręcznika nadal zawiera język onot on MacOS
Alternatywy do zaakceptowanej odpowiedzi stąd :
źródło