2013-11-03 2 views

ответ

3

Похоже Gnu дегтя имеет --transform вариант вы можете использовать:

tar cf ~/backup/blah-20131103.tar --transform='s|^/home/user/blah/|blah-20131103/|' ~/blah 

Если у вас нет Gnu деготь, сделать символическую ссылку с именем, которое вы хотите, и использовать опцию H.

cd 
ln -s blah{,-20131103} 
tar cfH backup/blah-20131103.tar blah-20131103 
rm blah-20131103 
+0

Благодарим вас за подсказку «tar -transform», но ваша демо на самом деле не работает для 2 факторов. Во-первых, «tar» удаляет ведущий '/' перед преобразованием, поэтому для его работы мы должны добавить 'P', чтобы сохранить абсолютный путь или изменить запись преобразования, чтобы вместо этого заменить«^home/... ». Во-вторых, папка верхнего уровня, похоже, не имеет косой черты для tar -transform, поэтому мы должны использовать '--transform = 's \ ^/home/user/blah \ (/ \ | $ \) | blah-20131103 \ 1 | '', чтобы заставить его работать. –

+0

Для второй демонстрации мы должны использовать 'tar cfh' вместо' tar cfH', где 'h' означает разыменовывать символические ссылки, а' H' дает ошибку. Но этот метод имеет побочный эффект: все символические ссылки внутри папки blah разыменовываются. –

0

Насколько я знаю, это должно сработать. Раньше я делал резервные архивы с внутренними каталогами.

cd /home/usr/ # To put you one level above "blah." 

mv blah blah-20131103 

tar jcvf blah-20131103.tar.bz2 blah-20131103 # This command compresses with bzip2. 

cd blah-20131103 
rm -v file1 file2 
cd .. 
rmdir blah-20131103 

Причина, почему я это сделал операцию Р.М. длинный путь, потому, что, хотя вы можете просто сделать

rm -rf blah-20131103 

Это очень опасно, если вы сделаете опечатку. Если вы заходите в самый каталог, удалите файлы без рекурсивных или силовых флагов для rm, затем cdup и используйте rmdir, чтобы избавиться от файла, что намного безопаснее, потому что вы можете убедиться, что команды имеют только мощность чтобы избавиться от конкретных файлов, которые вы хотите. Если вы допустите ошибку, это не повредит вам.

Я также всегда использую флаг -v (verbose) для rm, чтобы получить письменную запись о том, что он делает. Как уже упоминалось, rm может иметь катастрофические последствия, если вы небрежны, поэтому вам нужно быть очень осторожным и убедиться, что он имеет только правильное количество возможностей, делать то, что вы хотите, и не более того.

Еще безопаснее стратегия будет сделать это: -

mv blah-20131103 /tmp 
cd /tmp 
rm -rf blah-20131103 
cd ~ 

Таким образом, вы можете использовать гт с рекурсивными и силы флагов, чтобы избавиться от всего этого в один удар, но потому, что вы переместил каталог в/tmp и сделал его там, нет никакого риска случайно удалить все, что потенциально важно для вас.