検索はコマンドラインではうまく機能しますが、スクリプトでは機能しません。

検索はコマンドラインではうまく機能しますが、スクリプトでは機能しません。

私はDebian Jessieホストでスクリプトを書こうとしています。

スクリプトで次のコマンド(一部のバリエーションあり)を実行する際に問題があります。

find ~/* -path ~/FileSniper* \
-prune -o \
-type f \( -name "*.mp4" -o -name "*.sh" -or -name "*.mp3" \) \
! -name '*.txt' -printf "%f\n"

スクリプトで私がやろうとしているのは、ユーザーが検索したいファイルの種類を入力するようにしてからそれにパイプしてsed正しい形式を取得することです。

 echo "Input the formats like this: \"mp3,mp4,exe,sh\""
        read -p "input:" formats
        formattedformats=`echo "-name \"*.""$formats""\"" | sed 's/,/" -o -name "*./g'`
        find_parameters=(\(formattedformats\))

遺言状には$find_parameters次の内容が含まれます。

-name "*.mp3" -o -name "*.mp4" -o -name "*.sh" 

この行では何が問題なのかわかりません。

find ~/* -path ~/FileSniper* -prune -o -type f  "${find_parameters[@]}" ! -name "*.txt" -printf "%f\n" > foundfiles.txt

可能な限り調査しましたが、まだ問題が何であるかはわかりません。正しい方向を教えてください。

ベストアンサー1

findこれは(標準入力ではなく)コマンドラインからファイル拡張子を読み取り、それを使用してのオプションで使用する正規表現を作成する-iregexスクリプトです。

元の例に示すように、隠し.ディレクトリを除外します。~/FileSniper*

#! /bin/bash

regexp=''

for ext in "$@" ; do
    [ -n "$regexp" ] && regexp="$regexp\|"
    regexp="$regexp.*\.$ext$"
done

find ~ -not -path '*/.*' -not -path '*/FileSniper*' -type f \
    -iregex "$regexp" > foundfiles.txt

おすすめ記事