Linuxを使用しているときに、スペースを含まないファイル名でのみ機能するユーティリティやアプリに出くわす場合があります。ファイルを常にこの「スペースなし」形式で保存するわけではなく、ファイル名のスペースをアンダースコア文字「_」に置き換える回避策を探す必要がある場合があります。このように、ファイル名にはスペースが含まれず、すべてのアプリケーションで簡単に操作できます。
この記事では、コマンドラインを使用して、ファイル名のすべてのスペースをアンダースコアに変換する2つの方法について説明します。
この記事に記載されているコマンドと手順をUbuntu18.04LTSシステムで実行しました。
この記事のサンプルとして使用するダウンロードフォルダには、すべてのファイル名にスペースが含まれています。
$ ls Downloads
このフォルダを使用して、ファイル名を新しい形式に変換する方法を説明します。
方法1:単一のmvコマンドを使用
この方法では、forループでUbuntu mvコマンドを使用して、特定のディレクトリ内のすべてのファイル/フォルダーの名前を変更し、名前のすべてのスペースをアンダースコア文字に置き換えます。
アプリケーションランチャー検索またはCtrl+Alt + Tショートカットを使用して、Ubuntuコマンドラインであるターミナルを開きます。
使用するコマンドの構文は次のとおりです。
*のファイルの$ for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
同じコマンドを実行して、ダウンロードフォルダのスペースをアンダースコアに置き換えました:
ディレクトリの内容をもう一度リストすると、すべてのファイル名にスペースではなくアンダースコアが含まれていることがわかります。
方法2:スクリプトを使用してファイルの名前を変更する
この方法では、mvコマンドを使用するbashスクリプトを使用して、すべてのスペースがアンダースコアに置き換えられるようにファイル名とフォルダー名の名前を変更します。
ターミナルアプリケーションを開き、次のようにbinフォルダに移動します。
$ cd ~bin
次に、お気に入りのテキストエディタの1つで新しいスクリプトファイルを開きます。 replace_spaces.sh
という名前の空のスクリプトファイルを開くために、nanoエディターを使用します。$ sudo nano replace_spaces.sh
その空のファイルに、次のスクリプトを追加します。
#!/bin/bash for f in * do new="${f// /_}" if [ "$new" != "$f" ] then if [ -e "$new" ] then echo not renaming \""$f"\" because \""$new"\" already exists else echo moving "$f" to "$new" mv "$f" "$new" fi fi doneに移動します。
ヒント: スクリプト全体をbashファイルに入力する代わりに、ここからスクリプトをコピーして、Ctrl + Shift + Vを使用するか、右クリックメニューの[貼り付け]オプションを使用して、ターミナルに貼り付けることができます。
ファイルは次のようになります。
ここで、Ctrl + Xショートカットを使用してファイルを終了し、「変更されたバッファを保存しますか?」にファイルを保存します。 Yと入力し、Enterキーを押してプロンプトを表示します。
このファイルを実行可能スクリプトにするには、ターミナルで次のコマンドを実行します。
$ sudo chmod +x replace_spaces.sh
これで、任意のフォルダでスクリプトを使用する準備が整いました。
サンプルのダウンロードフォルダでスクリプトを実行すると、ファイル名のすべてのスペースが次のようにアンダースコアに変換されます。
したがって、これらは、ファイルの名前を変更して、名前のすべてのスペースをアンダースコアに変換する2つの方法でした。これで、使用しているアプリケーションがスペースを含むファイル名を認識できなくなります。