1. 概要

多くの場合、Linuxユーザーとして、ファイル名のスペースが原因で一部のファイルコマンドまたはアプリケーションが動作しなくなると、少し問題が発生します。 ファイル名にスペースを入れてファイルを保存するなど、特定のファイル操作または慣行が原因である可能性があります。 この記事では、ファイル名からスペースを置き換えることによって、そのようなファイルの名前を名前変更するためのもっともらしい方法のいくつかについて説明します。

2. 単一のmvコマンド

Linux mv コマンドは、ファイルまたはディレクトリを常に正常に移動または名前変更するとは限りません。 実際、ファイル名からスペースを置き換えるために使用すると、次のようになります。 saそのようなファイルやディレクトリはありませんメッセージ。 このようなファイルへのアクセスと名前の変更を可能にする3つのオプションについて説明します。

2.1. バックスラッシュまたはタブ補完を使用する

この特殊文字をエスケープするには、意図的にバックスラッシュを配置するか、スペースの直前でタブボタンを押すことができます。 ただし、を使用すると、名前のオートコンプリートが必要になるため、タブボタンを使用することをお勧めします。 それでも、これら2つの方法のいずれかを使用して、ファイルにアクセスし、を使用してファイルの名前を変更できます。 mv。 次の例は、その方法を示しています。

mv File\ with\ Spaces File_with_Spaces

2.2. 引用符で囲まれた名前

ファイルを二重引用符で囲むだけで、ファイル「FilewithSpaces」にアクセスできます。 名前を変更するmvコマンドは、次のようになります。

mv "File with Spaces" File_with_Spaces

2.3. findを使用したファイルへのアクセス

lsfindの顕著な違いの1つは、findが名前にスペースが含まれるファイルを検索できることです。 この場合、findコマンドの検索パターンは「**」になります。 一方、この検索パターンを使用したlsコマンドは失敗します。

$ ls "* *"
ls: cannot access * *: No such file or directory

とともに探すコマンドの場合、スペースを含むファイル名はnullバイトで出力されます (( -print0 )区切り文字として。 次に、$ 0はnullバイトで区切られたファイル名を読み取り、最後にmvはスペースをアンダースコアに置き換えます。

find . -type f -name "* *" -print0 -exec bash -c ‘mv "$0" "${0// /_}"’ {} \;

$ {0 // / _}の部分は、Bashのパラメーター展開を利用して、パターンを別の文字列に置き換えます。 構文は ${パラメータ/パターン/文字列}。

3. ファイルの名前を変更するための他のコマンド

ファイル名のスペースを置き換えるには、 名前の変更 sed 、およびtrを使用することもできます。 今回は、たくさんのファイルに取り組みます。 ファイルのセットは、forループを使用して繰り返し制御されるか、findコマンドを介してアクセスされます。

3.1. 名前の変更を使用する

スペースをアンダースコアに置き換える単純なrenameコマンド(これもPerlスタイルの正規表現を使用します)は次のようになります。

rename ' ' '_' *

これは、前のケースで見たBashのパラメーター展開の代替手段でもあります。 名前の変更は、名前にスペースが含まれるファイルを検索し、すべてのスペースを置き換えます。 アンダースコア付き:

find * -type f -name "* *" -exec rename "s/\s/_/g" {} \;

正規表現を使用すると、名前の変更が一部のシステムで機能しない場合があります。 それはシステムの依存関係であると思われるかもしれません。 実際にはそうではありません。 このコマンドには2つのバージョンがあります。

  • 構文rename’s/ ^ fgh / jkl /’fgh*を使用した「Perl」バージョン
  • util-Linuxバージョン。構文はrenamefgh jkl fgh *

util-Linuxの正規表現サポートはありません。 正規表現による名前の変更は「Perl」バージョンで機能し、「簡単にアクセスできない」場合はインストールする価値があります。

3.2. sedを使用する

sed は、ご存知のとおり、 S tream editorの略です。 Linuxでのsedコマンドの最も一般的な使用法は、置換または検索と置換です。 次のように、 sed を使用して、ファイル名のスペースを置き換えることができます。

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

ここ、 為に 変数iの名前にスペースが含まれるファイルを保存します。 次に、 sed は、ファイル名内のすべてのスペースをアンダースコアに置き換えます。

3.3. trを使用する

tr コマンドは、基本的な文字置換操作を実行できます。

for f in *; do mv "$f" `echo $f | tr ' ' '_'`; done

ここ、 為に 名前にスペースが含まれるファイルを変数fに格納します。 次に、 tr は、最初のセットのすべての文字を2番目のセットの文字に置き換えます。

4. 結論

この記事では、ファイル名にスペースが含まれるファイルを認識するためのいくつかのトリックを見ました。 また、renameコマンドを使用してbashループを回避する方法についても説明しました。 これで、これらの方法のいずれかで処理されたファイル名をアプリケーションが認識できなくなることはありません。