GNU parallelによって作成されたすべての隠しディレクトリの名前を変更する

GNU parallelによって作成されたすべての隠しディレクトリの名前を変更する

GNU Parallel は--resultsパラメータを使用して、次のように隠しディレクトリを出力します。

Ubuntu ですべてのディレクトリを非表示にしないように変更するには、どのコマンドを使用すればよいですか。ディレクトリの名前は次のとおりです。

'.\_ValidateAll.sh GL 170'/
'.\_ValidateAll.sh GL 190'/
'.\_ValidateAll.sh GL 220'/
'.\_ValidateAll.sh GL 355'/
'.\_ValidateAll.sh GL 357'/
'.\_ValidateAll.sh GL 359'/
'.\_ValidateAll.sh GL 361'/
'.\_ValidateAll.sh GL 363'/

ここに画像の説明を入力してください

実際、ディレクトリに対してcatを実行すると、シングルクォートは表示されません

vmdovs@ubuntu:/mnt/out/1$ cat 
GL170/                    .\_ValidateAll.sh GL 357/ .\_ValidateAll.sh GL 390/ .\_ValidateAll.sh GL 470/ .\_ValidateAll.sh GL 570/
rename.sh                 .\_ValidateAll.sh GL 359/ .\_ValidateAll.sh GL 400/ .\_ValidateAll.sh GL 480/ .\_ValidateAll.sh GL 572/
.\_ValidateAll.sh GL 190/ .\_ValidateAll.sh GL 361/ .\_ValidateAll.sh GL 410/ .\_ValidateAll.sh GL 500/ .\_ValidateAll.sh GL 574/
.\_ValidateAll.sh GL 220/ .\_ValidateAll.sh GL 363/ .\_ValidateAll.sh GL 420/ .\_ValidateAll.sh GL 530/ .\_ValidateAll.sh GL 590/
.\_ValidateAll.sh GL 355/ .\_ValidateAll.sh GL 368/ .\_ValidateAll.sh GL 440/ .\_ValidateAll.sh GL 540/ .\_ValidateAll.sh GL 710/

また、cdは次のようにディレクトリにアクセスできます。

cd .\\_ValidateAll.sh\ GL\ 190/

答え1

ディレクトリが非表示になっていることが唯一の問題である場合は、.ディレクトリ名の先頭から を削除するだけで非表示を解除できます。たとえば、perl-rename (Ubuntu では と呼ばれます) を使用する場合rename:

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

または、シェル ツールのみを使用する場合:

for dir in '.\_Validate'*; do echo mv "$dir" "${dir//.}"; done

ただし、これらを使用すると、スペースやスラッシュなどの不適切な文字を含む、ひどいディレクトリ名が残ってしまいます。名前を変更するのであれば、まともな名前に変更したほうがよいでしょう。

rename 's/^\.\\//; s/\s+/_/g' '.\_Validate'*

その結果は次のようになります:

$ ls -d _*
_ValidateAll.sh_GL_100  _ValidateAll.sh_GL_107  _ValidateAll.sh_GL_114
_ValidateAll.sh_GL_101  _ValidateAll.sh_GL_108  _ValidateAll.sh_GL_115
_ValidateAll.sh_GL_102  _ValidateAll.sh_GL_109  _ValidateAll.sh_GL_116
_ValidateAll.sh_GL_103  _ValidateAll.sh_GL_110  _ValidateAll.sh_GL_117
_ValidateAll.sh_GL_104  _ValidateAll.sh_GL_111  _ValidateAll.sh_GL_118
_ValidateAll.sh_GL_105  _ValidateAll.sh_GL_112  _ValidateAll.sh_GL_119
_ValidateAll.sh_GL_106  _ValidateAll.sh_GL_113  _ValidateAll.sh_GL_120

重要: ファイル名の衝突はチェックしていないことに注意してください。これらのいずれかの名前をすでに存在する名前に変更すると、既存のファイルが上書きされます。

答え2

GNU Parallel を使用できます:

parallel mv {} '{=s/^\.\\_//=}' ::: '.\_ValidateAll'*

これ.\_により、名前から削除されます。

スペースも _ に置き換えるには、次を実行します。

parallel mv {} '{=s/^\.\\_//; s/\s/_/g=}' ::: '.\_ValidateAll'*

答え3

原則として (おそらくご存知のとおり)、ファイルとディレクトリの名前が で始まる場合、それらは非表示になります.。したがって、 を削除することで、それらを再び「表示」することができます。これは、組み込みの文字列操作関数を使用し.て実行できます。bash

user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; mv "$dir" "$newname"; done

ただし、事前に試して正しく動作するか確認することをお勧めします。

user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; echo "rename $dir to $newname"; done

アップデート: この機会を活用し、そのプロセスですべての特殊文字を削除するには、@terdon の回答のアドバイスに必ず従う必要があります。

関連情報