ディレクトリツリーを見つけ、削除し、シンボリックリンクするようにbashスクリプトを改善します。

ディレクトリツリーを見つけ、削除し、シンボリックリンクするようにbashスクリプトを改善します。

しばらく使用してきたこのスクリプトはデフォルトで動作しますが、修正に役立ついくつかの問題があります。

目的は、外部マウントポイントを調べて、一致するソースディレクトリがあることを確認し、その場合はソースを削除し、外部からソースがある空の場所にシンボリックリンクを作成することです。

もちろん、同じことを行うより良い方法の提案は歓迎されます。

最初で最も重要な問題は、いくつかのディレクトリが忘れられることです。見てみると、特別なパターンは見えません。多くの場合、{}他の特殊文字がありますが、これが主な理由かもしれませんが、一部は非常に一般的で特殊文字がありません。

第二に、私のスクリプトはファイルを考慮せず、ディレクトリが必要です。

構造は次のとおりです。

19823798/Test1 (789) - {456} [123]
8765862/Test2 {123} - (456) [789]
345345/Test2-ünicode (456) - {789} [123]
308/unexpected.file

私のスクリプトは次のとおりです

#!/bin/bash
set -e
src_dir="/var/tank"
dest_dir="/mnt/tank"
nums_and_names=$(find "$src_dir" -mindepth 2 -maxdepth 2 -type d -regextype grep -regex ".*/[0-9]\{1,10\}/.*" -printf '%P\n')
while read -r named; do
        echo "dest_dir is "${dest_dir}/$named""
        echo "find output is $named"
        [ -d "${dest_dir}/$named" ] && echo ""${dest_dir}/$named" exists!" || exit 0
        rm -rf -- "${src_dir}/$named"
        ln -s -- "${dest_dir}/$named" "${src_dir}/$named"
done <<< "$nums_and_names"
echo "all finished"

ベストアンサー1

おすすめ記事