Я столкнулся с небольшой проблемой при извлечении rar файлов рекурсивно. Я использую эту строку find . -name '*.rar' -exec unrar e {} \; -exec rm {} \; && rm *.r*
и это, кажется, работает! Но проблема состоит в том, что файлы, которые извлекаются, заканчиваются в текущей рабочей папке. Когда я хочу, чтобы они были извлечены в папке, были, они.
Это - пример файловой структуры, двух папок, Holdiday_pictures_greece и Holdiday_pictures_malta. Они содержат rar файлы (или архивы rar). Holdiday_pictures_greece.rar и соответствующий архив Holdiday_pictures_greece.r01 Holdiday_pictures_greece.r02 и так далее.
~$ ls
Holdiday_pictures_greece
Holdiday_pictures_malta
~$ cd Holdiday_pictures_greece
Holdiday_pictures_greece $ ls
Holdiday_pictures_greece.rar
Holdiday_pictures_greece.r01
Holdiday_pictures_greece.r02
Holdiday_pictures_greece $ cd ..
~ $ find . -name '*.rar' -exec unrar e {} \; -exec rm {} \; && rm *.r*
~ $ ls
greece_01.jpg
greece_02.jpg
malta_01.jpg
malta_02.jpg
Как Вы видите от моего примера выше, все файлы из обоих архивов (Мальта и Греция) заканчиваются в ~
каталог, были, я запустил скрипт. Ожидаемый результат состоял бы в том, что они закончили в соответствующей папке, Holdiday_pictures_malta и Holdiday_pictures_greece. В папках могут также быть sub папки. Пример Holdiday_pictures_greece/2011
содержа больше rar файлов.
Я попробовал-execdir, тем же результатом, файлы заканчиваются в текущем dir.
Таким образом, ожидаемый результат должен был бы циклично выполниться через всю подпапку в текущем dir, извлечь rar файлы в папке, где они найдены и затем удаляют архив rar.
Это, вероятно, более просто сделать с while
цикл вместо -exec
:
find . -type f -name -name '*.rar' -print0 |
while IFS= read -r -d '' file; do
dir=$(dirname "$file")
rar=$(basename "$file")
cd "$dir"
unrar -e "$rar" && rm "$rar"
cd -
done
человек unrar:
НЕБЕСПЛАТНОЕ СОВМЕСТИМОЕ РЕЗЮМЕ UNRAR, unrar-бесплатное [elvx] [-ep] [-o +] [-o-] [-ppassword] [-u] [-] AR ‐ ШНИТТ-ЛУК [ФАЙЛ...] [МЕСТО НАЗНАЧЕНИЯ]
This syntax should only be used in front-end programs which are using
non-free unrar as a back-end. It is recommended to use this program by
GNU command line syntax.
e Extract files from archive without full path.
l List files in archive.
v Verbose list files in archive.
x: Файлы извлечения из архива с полным путем.