ディレクトリとサブディレクトリで一致するファイルを探す

ディレクトリとサブディレクトリで一致するファイルを探す

Percona XtraBackupを使用して圧縮バックアップを作成しましたが、今すぐファイルを解凍する必要があります。指示に従って、以下を実行する必要があります。

for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

しかし、どこでも検索して見つけたファイルを解凍しているようです。特定のディレクトリとサブディレクトリにのみファイルを解凍したいです。

私は実行しようとしています:

for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

しかし、これはエラーを引き起こします。

find: warning: Unix filenames usually don't contain slashes (though pathnames do).  
That means that '-iname `/path/to/my/directory/*.qp'' will probably evaluate to false all the time on this system.  

どうすればいいですか?

ベストアンサー1

for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

両方のコマンドに多くの問題があります。具体的には、find出力を繰り返して変数を参照できないため、珍しいファイル名を処理できません。

もちろん、受信したエラーに記載されているように、ファイル名にはスラッシュは含まれません。


あなたが望むもの:

find /path/to/my/directory -type f -iname '*.qp' -exec sh -c 'for f in "$@"; do qpress -d "$f" "$(dirname "$f")" && rm "$f"; done' find-sh {} +

または改行文字を含む代替バージョン:

find /path/to/my/directory -type f -iname '*.qp' -exec sh -c '
  for f
  do
    qpress -d "$f" "${f%/*}" &&
      rm "$f"
  done' find-sh {} +

追加資料:

おすすめ記事