私は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