複数のディレクトリ名の特定の部分を切り捨てるには?

複数のディレクトリ名の特定の部分を切り捨てるには?

親ディレクトリ(/home/anik/"All My Directories")に、次の命名構造を持つ100のディレクトリがあります。

  • Zt.isolate1.Spade
  • Zt.isolate2.Spades
  • Zt.isolate100.Spades

「Zt」を削除したい。そして各ディレクトリ名の「.Spades」部分。

ループ内のすべてのディレクトリに対してこれを行う方法を教えてください。ありがとうございます。

ベストアンサー1

名前を繰り返し、変数置換を使用して不要なビットを削除します。これは、これがファイルがある場所である$HOMEと仮定します(ファイルが別の場所にある場合は別の値に変更)。/home/aniktopdir

#!/bin/sh

topdir=$HOME

for dirpath in "$topdir"/Zt.*.Spades; do
    [ ! -d "$dirpath" ] && continue

    newdirpath=$topdir/${dirpath#$topdir/Zt.}
    newdirpath=${newdirpath%.Spades}

    if [ -e "$newdirpath" ]; then
        printf 'Can not rename "%s" into "%s", name taken\n' "$dirpath" "$newdirpath"
    else
        printf 'Renaming "%s" into "%s"\n' "$dirpath" "$newdirpath"
        echo mv "$dirpath" "$newdirpath"
    fi
done

この式は、最初にディレクトリファイル名を持たない$topdir/${dirpath#$topdir/Zt.}ディレクトリのパス名に置き換えられます。Zt.プレフィックスを削除し$topdir/Zt.$topdir/最初に再度追加してこれを行います。

式は値の末尾で文字列を拡張しますが、${newdirpath%.Spades}削除します。$newdirpath.Spades

echomv命令を実行する代わりに、実行する命令を出力するために命令の前に追加しました。コードをテストしecho、正しいと思われる場合は削除してください。

おすすめ記事