非常に初歩的な質問ですが、ネットで調べても該当する解決方法がわかりません。
Shellscript上で変数に値を設定後、他の変数に値を退避させる方法がわかりません。
パス名にスペースがあればアンダーバーに変換して、後で元のパス名を参照したいのですが、
退避させたはずの値までアンダーバーに変換されてしまっています。
たとえば、以下のコードを実行すればそうなります。
#!/bin/bash find . -name '*.m4a' | while read file do name=`echo ${file} | sed 's/.[^.]*$//'` name_bk=$name fname=$name # fnameにスペースがあれば_に変換 rename 's/ /_/g' [fname] echo "_をいれると" ${fname} # 変換前のファイル名を参照する echo "変換前は" ${name_bk} done
値の退避方法が悪いのだと思いますが、原因が分からず困っています。
どういう元ファイル名に対して、どのように出力されますか?
あと、OSは何ですか?
パス名にスペースが入った、音楽ファイルのパス名のスペースをアンダーバーで置き換えたあと、メイン処理後、再度元のパス名に戻すのが目的です。
OSは、Linux Mint 19 Taraです。
> パス名にスペースが入った、音楽ファイルのパス名のスペースをアンダーバーで置き換えたあと、メイン処理後、再度元のパス名に戻すのが目的です。
それは質問に書いてあるのでわかります。
「どういう元ファイル名に対して、どのように出力されますか?」という文の意味が分かりませんか?どういえばいいんだろう。
==========================
"ab cd.m4a"というファイル名に対して、
_をいれると ab_cd.m4a
変換前は ab_cd.m4a
と、出力される。
==========================
というような回答を期待しての質問なのですが。
また、
> OSは、Linux Mint 19 Taraです。
rename 's/ /_/g' [fname]
は、期待通りに動いていますか?
rename 's/ /_/g' ${fname}
の間違いではなく??
説明が、不足していてすみません。
==========================
"ab cd.m4a"というファイル名に対して、
_をいれると ab_cd.m4a
変換前は ab_cd.m4a
と、出力される。
最終的に、"ab cd.m4a"という退避ファイル名にリネームをかけるために、パス名の退避先であるname_bkを参照すると"ab cd.m4a"という表示になってほしいということです。
==========================
rename 's/ /_/g' [fname]
は、期待通りに動いています。
いま確認しますと、元ファイルのスペースが全て_(アンダーバー)に変更されてしまっていました。
回答2件
あなたの回答
tips
プレビュー