Распаковать файл в целевой каталог?

у меня есть файл с названием All CRGs.zip и я хочу, чтобы распаковать его содержимое в каталог с именем data (который уже существует и содержит некоторые другие файлы).

это возможно? Я работаю над OSX.

Я пробовал:

$ unzip "All CRGs.zip" -d data/

но это распаковывает все в data/All CRGs это не то, что я ищу. Я бы хотел, чтобы все сразу перешло в data.

это возможно?

15
задан Hennes
30.01.2023 11:24 Количество просмотров материала 3695
Распечатать страницу

2 ответа

вы можете воссоздать complete структура папок, включая All CRGs-папку или можно пропустить all папки внутри ZIP-файла с помощью -j - флаг для команды unzip -.

проблема в том, что zip-файл был создан с помощью All CRGs-папка верхнего уровня, как zip "All CRGs.zip" "All CRGs". Правильный путь был бы zip "All CRGs.zip" "All CRGs/*"который создал бы ZIP-архив всех файлов и папок внутри All CRGsпапку без окружающая папку.

таким образом, единственный способ извлечь только файлы, сохранив структуру папок будет что-то вроде этого:

unzip "All CRGs.zip" -d data/ && mv "data/All CRGs/*" "data/" && rmdir "data/All CRGs"

он распакует полную папку, а затем переместит содержимое папки на один уровень вверх и окончательно удалит (теперь пустую) папку "все CRG".

3
отвечен heiglandreas 2023-01-31 19:12

поскольку вы знаете, что zip-файл содержит нежелательную папку верхнего уровня, и поскольку вы знаете имя этой папки верхнего уровня, вы можете использовать символическую ссылку, чтобы все содержимое этой папки отображалось в Родительском каталоге следующим образом:

ln -s . 'data/All CRGs'
unzip 'All CRGs.zip' -d data

ln шаг вызывает папке data/All CRGs будет создана ссылка на текущую директорию (относительно data/), которая составляет data/. Затем, когда вы извлекаете файлы из All CRGs.zip и unzip команда пытается создать data/All CRGs/file.dat, что файл будет создан как data/./file.dat.

этот метод может быть продемонстрирован без zip-файла с помощью touch:

$ mkdir data
$ ln -s . data/subdir     
$ touch data/subdir/foo.txt
$ ls data
foo.txt subdir

вы можете использовать этот трюк тоже, чтобы вызвать определенные файлы или папки, которые будут извлечены в другую папку:

ln -s /tmp data/subdir2

то что в архиве быть извлечены subdir2 появится /tmp.

1
отвечен Jason R. Coombs 2023-01-31 21:29

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх