(.filename) ファイルを元の名前に変更する

(.filename) ファイルを元の名前に変更する

経由で行った変更を元に戻そうとしていますrename

サブフォルダ内のファイルの名前を変更していたのですが、何も考えずに次..のコマンドを使用してファイル名をクリアしようとしました。

rename "s/.././" *

今、私は600個のファイルを含むフォルダを持っていて、各ファイル名の最初の2文字が次のように変更されています。.zzyGir*

ファイル全体を失うことなく、「.」を各ファイル名の最初の文字に戻す方法はありますか?

次のようなさまざまなことを試しましたが、うまくいきませんでした。

rename "s/./Di/; *

私も一度に 1 つのファイルを処理するソリューションを検討していますが、主にファイルの損失を避けようとしています。

答え1

最初の2文字は過去のもの。元に戻すことはできません。ただし、.以下の手順でファイル名を変更して先頭の文字を取り除くことができます。

ターミナルbash

bash

間違ったファイル名でフォルダに入る

shopt -s dotglob
rename -n 's/^\./Di/' *

すべてが順調であれば

rename 's/^\./Di/' *

終了

shopt -u dotglob

説明

  • rename -n "s/^\./Di/" *

    • -n

      アクションなし: 名前を変更するファイルの名前を印刷しますが、名前は変更しません。

    • /^\./

      • ^文字列の先頭の位置をアサートする

      • \.文字.に文字通り一致する

  • shopt -s dotglobshopt -u dotglob

    • shopt

      shopt [-pqsu] [-o] [optname …]
      

      オプションのシェルの動作を制御する設定の値を切り替えます。

    • -s

      各 optname を有効 (設定) します。

    • -u

      各 optname を無効 (設定解除) にします。

    • dotglob

      .設定されている場合、Bash はファイル名展開の結果にa で始まるファイル名を含めます。


$ ls -oag
total 88
drwxrwxr-x   2  4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r--   1     0 Jul 17 17:16 .foo

$ rename "s/^\./Di/" *

$ ls -oag
total 88
drwxrwxr-x   2  4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r--   1     0 Jul 17 17:16 Difoo

これは何を意味するのかよく分かりません

「.」を各ファイル名の最初の文字に戻す方法はありますか?

こういうことですか?

.zzyGir->zzzzGir

はいの場合は、bash で次のコマンドを使用します。

shopt -s dotglob
rename -n 's/^\.(..)(.*)/$1$1$2/' *

結果を確認し、名前を変更します

rename 's/^\.(..)(.*)/$1$1$2/' *

そして最後にまた

shopt -s dotglob

答え2

私の理解では、以下のようなファイルを含むフォルダーがあります。

ls -la

drwxrwxr-x 2 ron ron 4096 Jul 17 20:50 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .abc
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .Gyr
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .hig123
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .zyz

.すべてのファイル名から削除して次のようにします。

abc
Gyr
hig123
zyz

findこれにはと を使用できますrename:

find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;

上記のコマンド (つまり-n) はドライ ランです。

find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;
rename(./.zyz, zyz)
rename(./.abc, abc)
rename(./.Gyr, Gyr)
rename(./.hig123, hig123)

-n実際にファイル名を変更するには、なしで実行します。

find . ! -path . -type f -name ".*" -exec rename "s/.\/.//" {} \;
ls -la
total 8   
drwxrwxr-x 2 ron ron 4096 Jul 17 20:59 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 abc
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 Gyr
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 hig123
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 zyz

関連情報