
ファイル名の前後に異なるピリオドがある限り、ファイル名のピリオドをハイフンに再帰的に変更する次のコマンドがあります。
find path/to/dir -depth -type f -name '*.*' -exec rename -n -d 's/(?<=.)\.(?=.*\.)/-/g' {} +
ただし、調整したいすべてのファイル名では効率的に機能するわけではなく、次の規則に従って再構築する必要があります。
- 名前の変更は、数字で始まるファイル名にのみ発生します。
- 隠しファイルは変更されません。
- 各ファイル名の最初の2つのピリオドのみが変更されます。
例えば: 同じ2020.12.06_name123.ext.xmp
になり、2020-12-06_name123.ext.xmp
そのまま維持されます。name123.ext.xmp
それを処理する方法?
Linux Mint Synamon 21を実行
答え1
おそらくzsh
以下を使用して実行できます。
autoload -Uz zmv
zmv -n '(**/)(<1900-2100>).(<1-12>).(<1-31>)([^0-9]*)(#q.)' '$1$2-$3-$4$5'
一致させる項目を明確にする必要があります。ここで、ファイル名はその範囲の YYYY.MM.DD 日付で始まります。
(-n
ドライランの場合。実際の実行のために削除してください。)
1技術的にこれも一致します002023.1.012
。<x-y>
つまり、間の数字を表す任意の10進数シーケンスの一致です。Xそしてワイ。
答え2
awk
以下は、名前が数字で始まり、点の位置が固定され、日付と残りの間の区切り文字が下線であると仮定する例です。
awk -F_ 'BEGIN {OFS="_"} /^[0-9]/ {a=gensub(".","-",5,$1);b=gensub(".","-",8,a);$1=b }1'
全文は次のとおりですfind
。
find -depth -type f -name '*.*" -exec awk -F_ 'BEGIN {OFS="_"} /^[0-9]/ {a=gensub(".","-",5,$1);b=gensub(".","-",8,a);$1=b }1' {} +