特定の場所のLinuxバッチの名前変更ファイル

特定の場所のLinuxバッチの名前変更ファイル

ディレクトリの特定の場所にあるすべてのファイルの名前を変更したいと思います。

元のファイルのサンプル名:

neif11_fastcredit_20190629101333.txt
neif11_fastcredit_20190629101334.txt
neif11_fastcredit_20190629101335.txt
neif11_fastcredit_20190629101336.txt
neif11_fastcredit_20190629101337.txt

名前を次に変更したいです。

neif11_fastcredit_20191129061333.txt
neif11_fastcredit_20191129061334.txt
neif11_fastcredit_20191129061335.txt
neif11_fastcredit_20191129061336.txt
neif11_fastcredit_20191129061337.txt

ファイル名について:

neif11_fastcredit_2019そのままにしておく必要があります。次の部分は月と日です。[MMDD]06291129今日の日付に更新したいのですが、最後の部分はうーんまた、変わらず維持されます。

私はLinuxを初めて使用するので、助けが必要です。

答え1

利用可能なものがない場合は、rename次の(Bash)ループを試すことができますsed

user@host$ for FILE in *.txt; do NEWNAME=$(sed 's/_20190629/_20191129/' <<< "$FILE"); mv "$FILE" "$NEWNAME"; done

これにはBashが必要です。別のシェルがある場合は、次の方法を使用する必要があります。

user@host$ for FILE in *.txt; do NEWNAME=$(echo "$FILE" | sed 's/_20190629/_20191129/'); mv "$FILE" "$NEWNAME"; done

また、これはファイル名が「非常にうまく機能する」と仮定しているため、特殊文字(例の一部ではない)が原因でこれらのエラーが発生する可能性があります。

答え2

そしてラリー・ウォールズrenamerename(Debian、Ubuntu)またはprename(RHEL / CentOS)):

rename -n s/_20190629/_20191129/ neif11_fastcredit_20190629*.txt

-n単に「模擬実行」スイッチです。-v実際の使用中に取り外しまたは交換してください。

答え3

使用mvと繰り返し:

for f in neif11_fastcredit_20190629*.txt; do
  mv "$f" "neif11_fastcredit_201911${f##*_201906}"
done

この部分は、各ファイル名から${f##*_201906}一致する最長の接頭辞を削除し、その部分を新しいファイル名の接尾辞として保持します。neif11_fastcredit_201906DDHHMMSS.txt

関連情報