Как я могу вызвать только относительные пути в выводе “находки”?

Я пытаюсь создать сценарий, который может сжать файлы с определенным расширением во многих каталогах в единственный шар 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
24
задан 13.02.2010, 09:50

1 ответ

Если Вы работаете 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 вместо этого (поскольку это может отобразиться на меньшую оболочку, которая не имеет улучшений удара),

12
ответ дан 07.12.2019, 09:45

Теги

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