ディレクトリ内のすべてのファイルについて、ファイル名の下線を空白に変更したいと思います。
私はこの解決策を試しましたが、私が望むものと反対の結果を得ました。https://stackoverflow.com/questions/1806868/linux-replacing-spaces-in-the-file-names
しかし、スペースは下線に変わりました。動作しないため、エラーが発生します。
´x´ is not a directory
たとえば、x はファイル名の最後の単語です。hello_world_x
ディレクトリ内のすべてのファイルで下線をスペースに置き換える正しいコマンドは何ですか?
ベストアンサー1
CDを正しいディレクトリに移動すると、スクリプトはユーザーの要件を確実に解決します(拡張のために移植可能ではありません${var//pat/str}
)。
#!/bin/bash
set -- *_*
for file; do
mv -- "$file" "${file//_/ }"
done
*_*
*_*
globは名前に含まれるすべてのファイルを選択します。_
set --
$1
これらの名前(スペースや改行を含む)は、単純なコマンドなどで位置引数に安定して設定されます。$2
set -- "list"
for file;
これにより、各位置パラメータが順番にvarファイルに割り当てられます。
do ... done
(それぞれについて)実行するコマンドが含まれています$file
。
mv -- "$file" "${file//_/ }"
各ファイルを同じ名前に移動(名前変更)し、_
それぞれ(すべて)を (スペース)に置き換えます。
ノート-i
:既存のファイルを上書きしないように(対話型)オプションを追加できます。ファイルが存在するかどうかをmv
尋ねます。 1つの注意点は、mv
ユーザーと通信できるインタラクティブシェルが必要であることです。
mv -i -- "$file" "${file//_/ }"