元の名前に*.~1~サフィックスを使用してファイルとディレクトリの名前を変更するには?

元の名前に*.~1~サフィックスを使用してファイルとディレクトリの名前を変更するには?

などのunderscore.~1~名前を持つ複数のファイルを含むディレクトリがあります。main.js.~1~index.js.~1~

underscoreディレクトリとその中のファイルの名前を元の名前などに変更するにはmain.jsindex.js

答え1

(Bashで)最も簡単な方法は、ディレクトリに変更して次のように行うことです。

for i in *.~1~; do mv $i ${i%.~1~}; done

上記のコードはすべてのファイルを繰り返し、*.~1拡張子(ターゲットとして指定)なしでそのファイルに移動します${i%.~1~}。シェルのテキスト置換を探します。

ディレクトリで同様の作業を実行できますが、ディレクトリが1つしかない場合は、手動で実行する方が簡単です。

mv underscore.~1~ underscore

答え2

mv端末では、単にコマンドを使用してフォルダとファイルを移動できませんか?

はい

$ find adir_.~1~/ -ls
10757186    4 drwxrwxr-x   2 saml     saml         4096 Oct 14 23:54 adir_.~1~/
10370964    0 -rw-rw-r--   1 saml     saml            0 Oct 14 23:50 adir_.~1~/afile_.~1~

次に、ディレクトリ+ファイルを移動します。

$ mv adir_.~1~/ adir
$ mv adir/afile_.~1~ adir/afile

そして確認してください:

$ find adir/ -ls
10757186    4 drwxrwxr-x   2 saml     saml         4096 Oct 15 00:01 adir/
10370964    0 -rw-rw-r--   1 saml     saml            0 Oct 14 23:50 adir/afile

答え3

すべてのファイルとディレクトリの名前を一度に変更するには、次を使用できます。rename少なくともDebianベースのLinuxディストリビューションでは、このコマンドはパッケージperlに含まれています。

rename 's/\.~1~$//' */*.~1~ underscore.~1~

最初のパラメータrenameは、実行する置換を記述するPerl正規表現です。後続のパラメータは、作業するファイルの名前です。 1つの呼び出しのみを管理するには、パラメーター・パス拡張が発生した後にそのディレクトリー内のファイル・パスが変更されないように、最後のディレクトリーを指定してください。

関連情報