ファイル名の初期文字列の名前変更

ファイル名の初期文字列の名前変更

名前の最初の部分を動的に削除し、別の場所にコピーする必要があります。私のファイル名は次のとおりです

Voice_XYZZ_1_1801.pdf
Voice_XYZZ_1_1801.ndx
Electon_MNOPQ_1_1801.pdf
Electon_MNOPQ_1_1801.ndx

実行時に音声、電子機器、またはその両方を作成できます。ファイル名から最初の部分を削除する必要があります。次のようにする必要があります。

XYZZ_1_1801.pdf
XYZZ_1_1801.ndx
MNOPQ_1_1801.pdf
MNOPQ_1_1801.ndx

これを達成するためにどのコマンドを使用できますか?

答え1

fBourneシリーズシェルを使用していると仮定すると、次のコマンドを使用して、ファイル名変数から最短の先行部分文字列一致(アンダースコアを含む)を削除できます。${f#*_}

前任者。

$ touch Voice_XYZZ_1_1801.pdf Voice_XYZZ_1_1801.ndx Electon_MNOPQ_1_1801.pdf Electon_MNOPQ_1_1801.ndx

$ for f in Voice_* Electon_*; do echo "${f#*_}"; done
XYZZ_1_1801.ndx
XYZZ_1_1801.pdf
MNOPQ_1_1801.ndx
MNOPQ_1_1801.pdf

mv次のようにファイル名を変更するコマンドで使用できます。

for f in Voice_* Electon_*; do mv "$f" "${f#*_}"; done

次のコマンドを使用して、同様に別の場所にコピーできますcp

for f in Voice_* Electon_*; do cp "$f" "newdir/${f#*_}"; done

答え2

これは、コマンドラインからPerlコードの1行を呼び出すことで簡単に実行できます。

ls *_* | perl -ne 'chomp($_); $orig = $_; $_ =~ s/[^_]*_//; rename $orig,$_;'

以下はコードの説明です。

  • 名前に "_"を含むすべてのファイル名を次のコマンドに送信します。

    エルエス_|

  • 渡された各文字列に対して、次のコマンドを実行します。

    パーライト

  • ファイル名から改行文字を削除する("ls"コマンドを実行した後の残りの部分)

    噛む($_);

  • 単語の最初の部分を削除して「_」が見つかるまで検索してください。

    $_ =~ s/[^]*//;

  • ファイル名の変更

    $orig、$_ の名前を変更します。

関連情報