
いくつかのファイルをコピーし、プロセスにその親ディレクトリを含めたいと思います。
現在の構造は次のとおりです。
/Module1/A/downloads/m13312/file.pdf
/Module1/A/downloads/m17312/file.pdf
/Module1/B/downloads/m18312/file.pdf
/Module2/A/downloads/m19312/file.pdf
パスの最後の2つの部分をキャッチしたいので、次のように終了します。
/mydir/m13312/file.pdf
/mydir/m17312/file.pdf
/mydir/m18312/file.pdf
/mydir/m19312/file.pdf
cut
正しい結果を使用して取得しようとしましたが、awk
パスが正しく返されないようです。以下は私が必要とするものに答える例です(まだコピー部分をカバーしていません)。
find . -type 'f' -path '*downloads*' -print0 | xargs -0 -I {} echo `cut -d/ -f4-5 <<<{}`
これは単にフルパスを印刷するので、まだ利用できないことを知っています。
答え1
pax
このオプションをサポートする場合-0
:
find . -type 'f' -path '*downloads*' -print0 |
pax -rw0s'|.*downloads/||' /mydir
答え2
これにより、トリックを実行できます。
for file in /Module*/*/downloads/m13312/file.pdf
do
file_directory="/mydir/$(basename "$(dirname "$file")")"
mkdir -p "$file_directory"
cp "$file" "$file_directory"
done