Я пытаюсь создать сценарий, который может сжать файлы с определенным расширением во многих каталогах в единственный шар tar. В настоящее время то, что я имею в файле сценария:
find "$rootDir" -name '*doc' -exec tar rvf docs.tar {} \;
Где $rootDir
основной путь должен искать.
Это прекрасно кроме путей, являются абсолютными в файле tar. Я предпочел бы, чтобы пути были относительно $rootDir
. Как я пошел бы о выполнении этого?
Пример тока tar -tf docs.tar
где $rootDir
/home/username/test
вывод:
home/username/test/subdir/test.doc
home/username/test/second.doc
Чем я требую, чтобы вывод был:
./subdir/test.doc
./second.doc
Если Вы работаете find
от желаемого корневого каталога и не указывают абсолютную начальную точку в find
опции, это произведет относительные пути к tar
вызовы команды это создает. Как так:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Если Вы не хотите изменять текущий рабочий каталог постоянно и используете bash
или подобный как Ваша оболочка Вы могли сделать
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
вместо этого.
Обратите внимание, что pushd/popd не присутствуют во всех оболочках, так проверьте страницу справочника как соответствующую. Они присутствуют в ударе, но не в основе sh реализация поэтому при явном использовании /bin/bash
можно полагаться на них, Вы не можете, если сценарий просит /bin/sh
вместо этого (поскольку это может отобразиться на меньшую оболочку, которая не имеет улучшений удара),