web-dev-qa-db-ja.com

Linux-ファイル名のスペースを置き換える

フォルダー内に多数のファイルがあり、すべてのファイル名のすべてのスペース文字をアンダースコアに置き換えたいです。どうすればこれを達成できますか?

83

これはそれを行う必要があります:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
147
neesh

Perlスタイルの正規表現を使用するコマンド 'rename'を使用することを好みます。

rename "s/ /_/g" *

-nフラグを使用してドライランを実行できます。

rename -n "s/ /_/g" *
60
DF.

使用して...

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

トリガーを引く前にこれを試してみたい場合は、mvecho mv

13
DigitalRoss

置換タスク再帰的を適用する場合はどうなりますか?どうしますか?

さて、私は自分で答えを見つけました。最もエレガントなソリューションはありません(条件を満たさないファイルも名前を変更しようとします)が、機能します。 (ところで、私の場合、アンダースコアではなく '%20'でファイルの名前を変更する必要がありました)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done
4
javipas

Bashを使用する場合:

for file in *; do mv "$file" ${file// /_}; done
3
Murali VP

すべてのファイルが.txtであると仮定して、次のようなものを試してください。

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
1
Amir Afghani

文字列(この場合はスペース文字)をLinuxの別の文字列で置き換える最も簡単な方法は、sedを使用することです。次のようにできます

sed -i 's/\s/_/g' *

お役に立てれば。

変数を引用してください:

for file in *; do echo mv "'$file'" "${file// /_}"; done

「エコー」を削除して、実際の名前変更を行います。

1
ghostdog74

別のソリューションを次に示します。

ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. awkを使用して、ファイル名を引用符で囲みます
  2. sedを使用して、スペースをアンダースコアに置き換えます。引用符付きの元の名前を出力します(awkから)。次に置換された名前
  3. xargsは一度に2行を取り、それをmvに渡します
1
yoogottamk

あなたの答えはファイル名のスペースをアンダースコアに置き換えるにあると思います。

0
Arthur Frankel

.py拡張子を持つすべてのファイルの名前を変更するには、find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"を使用します

サンプル出力、

$ find . -iname "*.py" -type f                                                     
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f                                                     
./Sample/Sample_File.py
./Sample_File.py
0
akilesh raj