2

ディレクトリ内のすべてのファイルを繰り返し処理し*.info、対応するファイルがあるかどうかを確認してい*.gzます (存在しない場合はファイルを削除し.infoます)。しかし、これを行うには、の.infoオフを取り除く必要があり$fileます。パラメータの置換をいじりましたが、何も機能してbashいないようです。拡張機能は (以下のコードのように) 簡単に取得できます、拡張機能以外のすべてではありません。うまくいくかもしれないと思っていたさまざまなことを試しました。誰もしませんでした。

for file in *.info; do
  gz_file="${file:(-4)}"                        # wrong... what is right?
  # gz_file=`echo "$file" | sed -e 's/.info//'` # easy alternative I'm trying to avoid
  if [[ ! -f "${gz_file}" ]]; then
    rm "${file}"
  fi
done

コメントアウトされた行に示されているように、これは で簡単に実行できることを認識してsedいますが、可能であれば、bash に組み込まれている変数操作機能を使用して実行したいと考えています。そのように機能させる方法。

4

2 に答える 2

2

試しました${file%.*}か?これにより、拡張子が削除されます。

于 2012-11-12T22:56:40.763 に答える
1
$ x=/foo/bar.info
$ echo ${x%.info}
/foo/bar
$ 
于 2012-11-12T22:53:20.280 に答える