find
以下を使用してファイルのリストを取得しようとしています。
find . \( -iname @eaDir -o -iname .DS_Store -o -iname Thumbs.db \) -prune -o -mtime -25 -type f -printf "%P\n"
これはうまくいきます。
ただし、上記のコマンドの出力をファイルにリダイレクトしようとすると、後者は空です。
FILES_TO_BACKUP=/tmp/__$$_myfiles.lst
find . \( -iname @eaDir -o -iname .DS_Store -o -iname Thumbs.db \) -prune -o -mtime -25 -type f -printf "%P\n" > $FILES_TO_BACKUP
理由を知っている人はいますか?
答え1
スクリプトから呼び出してコマンドラインで実行する間にユーザーなどを変更していますか?その場合、PATHが変更された可能性があり、別の照会が行われている可能性があります。
このような特定の問題の場合、私はしばしば「strace」と一緒にコマンドを実行し、どのように異なるかを確認します。
あなたが提供した2つの呼び出しと何の違いもわかりません。スクリプトで2番目の呼び出しを実行しているというヒントがある可能性があるため、違いがある可能性があります。どちらも前に「pwd」を実行して同じ場所で実行されていることを確認し、「検索」も役に立ちます。