bashスクリプトはファイル名を[と]と正しく比較しません。

bashスクリプトはファイル名を[と]と正しく比較しません。

ファイルを処理するbashスクリプトがあります。findあるディレクトリのすべてのファイルと別のディレクトリの各ファイル名を検索します。これを行うには、次を使用します。

"${myfiletobesearched}"

スクリプト内部。ただし、ファイル名に[または]が含まれている場合、ファイルのコピーがあっても、スクリプトは2番目のディレクトリにそのファイルを見つけません。ファイル名を同じように認識させるにはどうすればよいですか?

問題の範囲を例に絞ることができました。

myfile="My File [Official Awesome File].txt"
find ./ -name "${myfile}" -type f

その名前のファイルがあっても出力は提供されません。\[もちろん文を書いたり、そういうことです。オプションではありませんmyfile小切手ディレクトリで発生するためです。

スクリプトは次のとおりです。https://gist.github.com/Make42/5bdae5e4de32cff0d01c9486b09383ee

ベストアンサー1

myfile="My File [Official Awesome File].txt"
myfile=$(echo $myfile | sed -r 's/(\[|\])/\\\1/g')    
find ./ -name "${myfile}" -type f

これが機能していることを確認できますか?

myfile私はこれが次の値に変わると予想しました。

myfile="My File \[Official Awesome File\].txt"

より良い方法は以下を使用することですprintf

myfile=$(printf '%q\n' "$myfile")

具体的な例では、find次のようになります。

find ./ -name "$(printf '%q\0' "$myfile")" -type f

おすすめ記事