Bashを使用して、ディレクトリ名とサブディレクトリのすべての点を空白に変更しようとします。
例: ディレクトリ目次1.3 なります目次 1 3
これまで私のスクリプトは次のようになりました。
#!/bin/bash
for dir in *\ -\ *; do
[[ -d "$dir" ]] || continue # skip if not a directory
sub="${dir#* - }"
if [[ ! -e "$sub" ]]; then
mv "$dir" "$sub"
mv echo "$(echo "Result: ${dir%.*}" | sed 's/\./ /g').${dir##*.}"
fi
done
ベストアンサー1
使用find
:
find . -mindepth 1 -type d -name "*.*" -exec bash -c '
for ((i=$#;i>0;i--)); do
dir=${!i}
newdir=$(dirname "$dir")/$(basename "$dir" | tr -s "." " ")
if [ -e "$newdir" ]; then
echo "skipping \"$dir\", \"$newdir\" already exists" >&2
else
mv "$dir" "$newdir"
fi
done
' bash {} +
*.*
パターンを使用して現在のディレクトリのすべてのディレクトリ名を再帰的に探します-mindepth 1
。見つかったディレクトリのリストは-exec
bash スクリプトに渡され、その引数は for ループで逆順に処理されます(より深いレベルのサブディレクトリが最初に表示されます)。
新しいディレクトリ名はdirname
その合計に基づいて生成されますbasename
。後者は、tr
複数の点が単一の空白文字に変わるところで修正されます(-s
複数の点を複数の空白に置き換えるにはオプションを削除してください)。新しいディレクトリ名がすでに存在する場合は、エラーメッセージを印刷または移動します。