Распаковать архив tar, исключая определенную папку и ее содержимое

С php я пользуюсь exec("tar -xf archive.tar -C /home/user/target/folder") извлечь содержимое определенного архива (archive.tar) в целевой каталог (/ home / user / target / folder), чтобы все существующее содержимое целевого каталога было перезаписано новыми, содержащимися в архиве.

Он работает нормально, и все файлы в целевом каталоге перезаписываются после извлечения, но есть один каталог в архиве, который я хотел бы пропустить (из извлечения и, таким образом, перезаписи существующего в целевой папке) …
Например, archive.tar содержит:

folderA /

folderB /

folderC /

folderD /

fileA.php

fileB.php

fileC.xml

Как я могу извлечь (и перезаписать) все, кроме (например) папки C /? Другими словами, я хочу, чтобы папка C и ее содержимое оставались нетронутыми в директории пользователя и не были перезаписаны папкой, содержащейся в архиве tar.

Какие-либо предложения?

(Tar на хостинг-сервере — это версия 1.23 GNU)

0

Решение

Вы можете использовать ‘—exclude’, чтобы пропустить папку:

tar -xf archive.tar -C /home/user/target/folder" --exclude="folderC"
2

Другие решения

Есть --exclude PATTERN вариант в tar инструмент. Проверьте:
tar на linuxcommand.org

0

записывать --exclude='./folder' в начале команды tar. В вашем случае это
exec("tar -x --exclude='./C' -f archive.tar -C /home/user/target/folder")

0

Чтобы быть в безопасности, вы можете удалить все разрешения на запись из папки. Например:

$ chmod 000 folderC/

Затем сделайте обычное извлечение tar (как обычный пользователь). Вы получите несколько сообщений об ошибках на консоли, но ваша папка останется нетронутой … В конце tar, верните исходные разрешения вашей папке. Например:

$ chmod 775 folderC/

Конечно, опция «—exclude» tar является правильным решением этой конкретной проблемы, но, если вы не уверены на 100% в синтаксисе команды, и вы обрабатываете критический данные, мое решение ставит вас в безопасное место :-).

0
По вопросам рекламы [email protected]