Как мне сменить каталог без сохранения структуры каталога?

Я работаю над сценарием резервного копирования и хочу архивировать файловый каталог:

tar czf ~/backup.tgz /home/username/drupal/sites/default/files

Это мешает, но когда я распаковываю полученный файл, он включает полную файловую структуру: файлы находятся в home/username/drupal/sites/default/files,

Есть ли способ исключить родительские каталоги, чтобы результирующий tar просто знал о последнем каталоге (files)?

11 ответов

Решение
cd /home/username/drupal/sites/default/files
tar czf ~/backup.tgz *

Используйте параметр --directory:

 tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 

Привет у меня есть лучшее решение, когда войти в указанный каталог, это невозможно (Makefiles и т. Д.)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed .

Не забывайте точку (.) В конце!!

Создать tar-архив

tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en

Un-tar файлы на локальном компьютере

tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

Загрузить на сервер

scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
echo "File uploaded.. deployment folders"

Un-tar на сервере

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

Чтобы использовать решения nbt и MaikoID :

      tar -czf destination.tar.gz -C source/directory $(ls source/directory)

Это решение:

  • Включает все файлы и папки в каталоге
  • Не включает какую-либо структуру каталогов (или .) в конечном продукте
  • Не требует от вас смены каталогов.

Однако он требует, чтобы каталог был указан дважды, поэтому он может быть наиболее полезен в другом скрипте. Это также может быть менее эффективным, если в папке много файлов/папок. source/directory. При необходимости измените подкоманду.

Так, например, для следующей структуры:

      |- source
|  |- one
|  `- two
`- working

следующая команда:

      working$ tar -czf destination.tar.gz -C ../source $(ls ../source)

будет производить destination.tar.gzгде оба oneа также two(и подфайлы/папки) являются первыми элементами.

Если вы хотите архивировать файлы с сохранением структуры, но частично или полностью игнорировать ее при извлечении, используйте аргумент --strip-components при извлечении.

В этом случае, если полный путь — /home/username/drupal/sites/default/files , следующая команда извлечет содержимое tar.gz без полной структуры родительского каталога, сохранив только последний каталог пути (например, файлы /файл1).

tar -xzv --strip-components=5 -f backup.tgz

Я нашел этот совет на https://www.baeldung.com/linux/tar-archive-without-directory-structure#5-using-the---strip-components-option.

Разархивировать все txt (*.txt) файлы из /home/myuser/workspace/zip_from/ в /home/myuser/workspace/zip_to/ без структуры каталогов исходных файлов используйте следующую команду:

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz  --directory="/home/myuser/workspace/zip_from/" *.txt

Для меня -C или --directory не работали, я использую это

cd source/directory/or/file
tar -cvzf destination/packaged-app.tgz *.jar
# this will put your current directory to what it previously was
cd -

Это сработало для меня:

gzip -dc "<your_file>.tgz" | tar x -C <location>

Пожалуйста, используйте приведенную ниже команду для создания файла tar без структуры каталогов.

      tar -C <directoryPath> -cvzf <Path of the tar.gz file> filename1 filename2... filename N

например:

      tar -C /home/project/files -cvzf /home/project/files/test.tar.gz text1.txt text2.txt
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files

-C делает CD для вас

Другие вопросы по тегам