web-dev-qa-db-ja.com

ファイル名にスペースが含まれているファイル(ディレクトリを含む)を検索して名前を変更します

Ext4ファイルシステムのファイル名にスペースを含むファイルとディレクトリがかなりあります。

それらを安全に見つけて名前を変更するにはどうすればよいですか?私はbashを持っていて、Ubuntuを実行しています。

見つかった各ファイルの名前をインタラクティブに変更することはできますか?つまり、各ファイルの名前を何に変更するかを尋ねられますか?

ファイル名を選択するためにどのような規則を使用して名前を変更しますか?

2
Tim

ディレクトリごとに、名前の変更を使用するのは簡単です。

rename 's/\s/_/g' *

これにより、ディレクトリ内のファイル名のすべてのスペースが削除され、「_」に置き換えられます。 'g'を省略すると、ファイル名の最初のスペースのみが置き換えられるため、その部分を忘れないでください。 *は、それを実行するディレクトリ内のすべてのファイルを意味します。

rename 's/\s/_/g' /home/you/something/*

ディレクトリ内のファイル名のすべてのスペースを置き換えます:/home/you/something/

これは多くのディレクトリを通過することをカバーしていませんが、それは私が一般的にそれをする方法です。

私はアンダースコアが好きです、それは変わるでしょう:

my file with spaces.txt

my_file_with_spaces.txt
4
Lizardx

このスクリプトは、ターゲットディレクトリ内のすべてのファイルを検索し、スペースを含まないようにすべてのファイルの名前を変更する新しいスクリプトを生成します。その後、実行前に自由にスクリプトを確認できます。

#!/bin/bash
TARGET=/path/to/files
NEWSCRIPT=${HOME}/rename-spaced-files.sh

OLDIFS="${IFS}"
IFS="\n"
for file in $(find ${TARGET}/ -type f -name "* *"); do
    if [[ -f \"${file// /}\" ]]; then
        echo "# \"${file// /}\" already exists- come up with a new name for it and uncomment the next line" >> $NEWSCRIPT
        echo -n "# " >> $NEWSCRIPT
    fi
    echo "mv \"${file}\" \"${file// /}\"" >> $NEWSCRIPT

done
4
DopeGhoti

Unixとそのファイルシステムでは、ファイル名にスペースを含めることは完全に合法ですが、シェルコマンドや変数から名前を引用する場合は注意が必要です。 g。スクリプトで。それ以外の場合、シェルは各Wordを個別のパラメーターとしてコマンドに渡します。

VAR="existing file with spaces in name"

#This works
ls "${VAR}"

#This results in file(s) not found
ls ${VAR}

すでに与えられた回答に加えて、 mmv コマンドを使用して、mmvがあるため、名前のスペースに関係なく、名前がパターンに一致する複数のファイルの名前を変更することもできます。とにかくソースとターゲットのパターンを引用する必要があります。

そして恥知らずに 自分自身を引用 (しゃれは意図されていませんが、陽気に受け入れられました):

経験則:常に展開するときは、文字列を含むシェル変数を引用符で囲みます。スペースが含まれているか、空である可能性があります。引用符で囲まれていないと、渡されるコマンドが混乱することがよくあります(パラメーターが多すぎるか欠落している)。

2
Murphy