H Все,
Я пытаюсь заархивировать файлы старше определенной продолжительности, когда я пытаюсь распаковать tar-файл, он сохраняет структуру каталогов из корневой папки. Я не хочу сохранять родительские папки. Используемая команда
:
find /home/prj/myfolder/* -mtime 1 -type f |
while read file;
do
tar -Pcvzf archive.tar.gz --remove-files "$file"
done
. Проблема: расположение файла /home/prj/myfolder/abc/a.txt при извлечении архива .tar .gz содержит каталог /home/prj/myfolder/abc/a.txt dir.
Я ожидаю, что abc / a.txt
Отбросьте "/home/prj/myfolder /*" и использование "CD/home/prj/myfolder /" для навигации к тому местоположению.
cd /home/prj/myfolder/
find . -mtime 1 -type f |
while read file;
do
tar -Pcvzf archive.tar.gz --remove-files "$file"
done
файлы будут затем храниться с относительным путем.
Я использовал бы решение в ответе Rinzwind. Нет никакой настоящей причины для предотвращения cd
; особенно при помещении этого в сценарий оболочки поскольку эти cd
будет влиять просто на сценарий, не оболочку, Вы называете сценарий от.
, Если Вы действительно действительно не делаете wan't для использования cd
, можно использовать tar
опция s --transform
:
gbl@roran:~$ tar -cf /tmp/archive.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive.tar
home/gbl/Temp/a.out
gbl@roran:~$ tar --transform 's/^home\/gbl//' -cf /tmp/archive2.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive2.tar
/Temp/a.out
gbl@roran:~$ tar --transform 's/^home\/gbl\///' -cf /tmp/archive3.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive3.tar
Temp/a.out
я опустил приблизительно tar: Removing leading '/' from member names
сообщения здесь, поскольку они не способствуют ответу.
Использование любой sed
регулярное выражение для преобразования, прочитайте руководство еще для нескольких опций.
существует также --strip-components
для удаления этого много компонентов контура из запуска имени файла, но это работает над извлечением только, не при создании архива.
Однако это ограничивается tar гну, таким образом, Вы будете в порядке на Linux, но вероятно не каждый раз, когда Вы переключаетесь на MacOS, Солярис или AIX. Который является другой причиной избежать его, тем более, что существует легкое другое решение (cd
первое).