ディレクトリの名前を変更すると、4番目と6番目の文字の後にダッシュが追加されます。

ディレクトリの名前を変更すると、4番目と6番目の文字の後にダッシュが追加されます。

4番目と6番目の文字の後にダッシュを追加して、いくつかのディレクトリの名前を変更しようとしています。私はこの記事を読んだ。Bashでディレクトリだけを繰り返す方法は?ダッシュを挿入したいディレクトリを正常に繰り返すことができます。しかし、これを見たらファイル名を変更すると、4 番目と 6 番目の文字の後にダッシュが追加されます。ディレクトリに同様の構文を使用することもできますが、そうした後はそれを行うことができないことに気づきました。これは私の構文です。

for d in */ ; do
      mv “$d" “${d::4}-${d:4:2}-${d:6}"
done

SE全体を検索しましたが、同様の投稿は見えませんでした。この質問に対する回答が他の場所で提供されている場合は、事前にお詫び申し上げます。

また、提供できる助けに感謝します。最高、ジョン

答え1

使用真珠renameすべてのディレクトリの名前を変更します。

rename -n 's/^(.{4})(.{2})/${1}-${2}-/' */

-nテストに満足したら削除してください。

前任者:

$ mkdir foobarbase{a..c}
$ rename -n 's/(.{4}) # 1st capture group
               (.{2}) # 2nd capture group
              /${1}-${2}-/x' foobar*
rename(foobarbasea, foob-ar-basea)
rename(foobarbaseb, foob-ar-baseb)
rename(foobarbasec, foob-ar-basec)

コードを保持するには、ASCII二重引用符を置き換えます。"

答え2

文字を次のように変更しました"

for d in */ ; do
      mv "$d" "${d::4}-${d:4:2}-${d:6}"
done

私のディレクトリ

#ls
fooobar1   fooobar2  fooobar4  fooobar6  fooobar8
fooobar10  fooobar3  fooobar5  fooobar7  fooobar9

そして実行した後

#ls
fooo-ba-r10  fooo-ba-r3  fooo-ba-r5  fooo-ba-r7  fooo-ba-r9
fooo-ba-r1  fooo-ba-r2   fooo-ba-r4  fooo-ba-r6  fooo-ba-r8

コードはすべてのディレクトリとファイルの名前を変更しますが、ディレクトリ名のみを変更する場合は、次のコードを使用します。
find * -maxdepth 0 -type d  | while read d
do
      mv "$d" "${d::4}-${d:4:2}-${d:6}"
done
@ilkkachu コメントを読む

関連情報