ディレクトリの特定の場所にあるすべてのファイルの名前を変更したいと思います。
元のファイルのサンプル名:
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]0629
1129
今日の日付に更新したいのですが、最後の部分はうーんまた、変わらず維持されます。
私は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
そしてラリー・ウォールズrename
(rename
(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_201906
DDHHMMSS.txt