Имам цяла структура от директории с zip файлове. Бих искал да:
- Преминете цялата структура на директориите рекурсивно, хващайки всички zip файлове
- Бих искал да намеря конкретен файл "* myLostFile.ext" в един от тези zip файлове.
Това, което се опитах
1. Знам, че мога лесно да изброявам файлове рекурсивно:
find myLostfile -type f
2. Знам, че мога да изброявам файлове в архиви:
unzip -ls myfilename.zip
Как да намеря конкретен файл в структурата на директориите на zip файлове?
Отговори:
5 за отговор № 1Можете да пропуснете използването на търсене за едно ниво (или рекурсивно в bash 4 с globstar
) търсения на .zip
файлове, използващи a for
подхождане:
for i in *.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
за рекурсивно търсене в bash 4:
shopt -s globstar
for i in **/*.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
4 за отговор № 2
Можеш да използваш xargs
за да обработите изхода от find или можете да направите нещо подобно на следното:
find . -type f -name "*zip" -exec sh -c "unzip -l "{}" | grep -q myLostfile" ; -print
който ще започне да търси .
за файлове, които съвпадат *zip
след това ще се изпълни unzip -ls
на всеки и потърсете името на файла. Ако това име на файл бъде намерено, то ще отпечата името на zip файла, който съответства.