多くのサブディレクトリを含むディレクトリ 'main'があり、これらのサブディレクトリのいくつかには、コロンを含むファイル名があります。 LinuxからGitHubリポジトリに「main」ディレクトリをアップロードしましたが、Windowsではファイル名にコロンが許可されていないため、Windowsマシンでこのリポジトリからプルしようとすると問題が発生しました。
Linuxターミナルを使用して、「main」ディレクトリ内のコロンを含むすべてのファイル名を再帰的に検索し、コロンをダッシュ(-)文字などに置き換えるにはどうすればよいですか?
find /path/to/directory -type f -name "*:*" -exec rename -n 's/:/-/g' {} +
(このコマンドが機能しない場合は、この回答の最後にある互換性に関する注意事項を参照してください。)
これは、何が起こるかを印刷するだけの基本的な安全バージョンです。それを実際に実現するには、-n
オプションを削除します。
-name "*:*"
がなくても機能しますが、コマンド全体が高速になるため、変更する必要のあるファイル名のみをfind
に渡すことをお勧めします。
それはこのように動作します:
find
finds ... /path/to/directory
ディレクトリ内.。-type f
).。-name "*:*"
)、.。rename
を実行します(必要に応じて複数回)...:
を-
に置き換えるパターンを使用...{} +
)。ノート:
このソリューションは、Debian、Ubuntuで利用可能なrename
パッケージのPerlスクリプトrename
を使用します。他のディストリビューションには、util-linux
からrename
がある場合があります。
このマニュアル 非Perl rename
の解決策は次のようになります。
find /path/to/directory -type f -name "*:*" -execdir rename -n ':' '-' {} +
(繰り返しますが、正しく見える場合は-n
を削除してください。)ただし、これはテストしていません。ファイル名の最初のコロンのみが置き換えられると思います。回避策は、コロンがなくなるまでコマンドを繰り返すことです(-n
なし、-v
あり)。
または、 このサイト (現在はFile-Rename-0.20.tar.gz
、スクリプトの名前はrename.PL
)にあるアーカイブからPerlスクリプトを入手することもできます。 この質問 も参照してください。