このスレッド(https://superuser.com/questions/659876/how-to-rename-files-and-replace-characters)は豊富であることが証明されており、ファイル名の文字の最初のインスタンスを置き換える必要があることを除いて、必要なことを行います。
どうすればいいですか?
for f in *:*; do mv -v "$f" $(echo "$f" | tr '.' '_'); done
.
次のように、filenameの最初のインスタンスのみを置き換えます。
2022-10-07T071101.8495077Z_QueryHistory.txt
答え1
残念ながら、試している方法は必要以上に複雑で脆弱です(ファイル名に特定の特殊文字が含まれていると競合が発生します)。これは以下に基づくより簡単なアプローチです。パラメータ拡張変換ファイル名:
for f in *; do mv -v -- "$f" "${f/./_}"; done # replace the first .
for f in *; do mv -v -- "$f" "${f//./_}"; done # replace every .
これにはシェルとしてbash、ksh、またはzshが必要です。 dash(Ubuntuのスクリプトには頻繁に使用されますが、インタラクティブにはほとんど使用されません)などの他のシェルにはパラメータ拡張形式は/bin/sh
ありません。${VARIABLE/PATTERN/REPLACEMENT}
prename
または()を使用できますapt install rename
。
rename 's/\./_/' * # replace the first .
rename 's/\./_/g' * # replace every .
autoload -U zmv # put this in your .zshrc
zmv '*' '${f/./_}' # replace the first .
zmv -W '*.*.*' '*_*.*' # replace the next-to-last .
zmv '*' '${f//./_}' # replace every .
私の答えのすべての部分は、名前がドットで始まるファイルをスキップします。
答え2
rename -n 's/\./_/' ./2022-10-07T071101.8495077Z_QueryHistory.txt
出力がうまくいったら削除してください-n
(別名)。dry-run