ディレクトリ内のすべてのファイルの下線を空白に置き換えます。

ディレクトリ内のすべてのファイルの下線を空白に置き換えます。

ディレクトリ内のすべてのファイルについて、ファイル名の下線を空白に変更したいと思います。

私はこの解決策を試しましたが、私が望むものと反対の結果を得ました。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これらの名前(スペースや改行を含む)は、単純なコマンドなどで位置引数に安定して設定されます。$2set -- "list"

for file;これにより、各位置パラメータが順番にvarファイルに割り当てられます。

do ... done(それぞれについて)実行するコマンドが含まれています$file

mv -- "$file" "${file//_/ }"各ファイルを同じ名前に移動(名前変更)し、_それぞれ(すべて)を (スペース)に置き換えます。

ノート-i:既存のファイルを上書きしないように(対話型)オプションを追加できます。ファイルが存在するかどうかをmv尋ねます。 1つの注意点は、mvユーザーと通信できるインタラクティブシェルが必要であることです。

mv -i -- "$file" "${file//_/ }"

おすすめ記事