Архивируйте файлы по возрасту с помощью команды tar

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

1
задан 25 May 2016 в 18:35

2 ответа

Отбросьте "/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

файлы будут затем храниться с относительным путем.

4
ответ дан 26 May 2016 в 04:35

Я использовал бы решение в ответе 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 первое).

0
ответ дан 26 May 2016 в 04:35

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

Похожие вопросы: