/ / Намиране на файл в рекурсивната директория на zip файлове - linux, bash, ubuntu, sed, grep

Намиране на файл в рекурсивната директория на zip файлове - linux, bash, ubuntu, sed, grep

Имам цяла структура от директории с zip файлове. Бих искал да:

  1. Преминете цялата структура на директориите рекурсивно, хващайки всички zip файлове
  2. Бих искал да намеря конкретен файл "* 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 файла, който съответства.