Anda dapat menggunakan %P
format dalam -printf
direktif:
find ${rootDir} -name '*.doc' -printf "%P\n"
akan ditampilkan dalam contoh Anda:
subdir/test.doc
second.doc
Anda kemudian dapat menggunakan find
ini daftar dalam for
ekspresi, untuk menjalankan perintah exec kami, seperti pada:
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
Jika Anda menjalankan find
dari direktori root yang diinginkan dan jangan tentukan titik awal mutlak di find
, itu akan menampilkan jalur relatif ke tar
pemanggilan perintah yang dibuatnya. Seperti itu:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Jika Anda tidak ingin mengubah direktori kerja saat ini secara permanen dan menggunakan bash
atau serupa dengan shell Anda yang bisa Anda lakukan
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
sebagai gantinya.
Perhatikan bahwa pushd/popd tidak ada di semua shell, jadi periksa halaman manual yang sesuai. Mereka hadir dalam bash tetapi tidak dalam implementasi sh dasar sementara secara eksplisit menggunakan /bin/bash
Anda dapat mengandalkan mereka, Anda tidak dapat melakukannya jika skrip meminta /bin/sh
sebagai gantinya (karena ini mungkin memetakan ke shell yang lebih kecil yang tidak memiliki peningkatan bash)