私はちょうどbashスクリプトを使い始めました。私は複数のファイルタイプでfindコマンドを使う必要があります。bashスクリプトでfindコマンドを使用する
list=$(find /home/user/Desktop -name '*.pdf')
PDFタイプについて、このコードの作品が、私は、.txtのような複数のファイルタイプを検索したり、あなたのすべてのアイデアをtogether.Haveを.BMPしたいですか?
私はちょうどbashスクリプトを使い始めました。私は複数のファイルタイプでfindコマンドを使う必要があります。bashスクリプトでfindコマンドを使用する
list=$(find /home/user/Desktop -name '*.pdf')
PDFタイプについて、このコードの作品が、私は、.txtのような複数のファイルタイプを検索したり、あなたのすべてのアイデアをtogether.Haveを.BMPしたいですか?
bashへようこそ。古くて暗くて不思議なものです。素晴らしい魔法が可能です。 :-)
あなたが尋ねるオプションは、find
コマンドですが、bashでは使用できません。コマンドラインから、man find
にオプションを表示することができます。
あなたが探しているものは、 "または" の-o
です:
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
言った... はこれをしないでください。このようなストレージは、単純なファイル名では機能しますが、空白や改行などの特殊文字を扱うとすぐに、すべてのベットはオフになります。詳細については、ParsingLsを参照してください。
$ touch 'one.txt' 'two three.txt' 'foo.bmp'
$ list="$(find . -name \*.txt -o -name \*.bmp -type f)"
$ for file in $list; do if [ ! -f "$file" ]; then echo "MISSING: $file"; fi; done
MISSING: ./two
MISSING: three.txt
パス名の拡張(グロビング)は、ファイルの追跡をはるかに優れた、より安全な方法を提供します。そして、あなたはまた、bashのアレイを使用することができます。
$ a=(*.txt *.bmp)
$ declare -p a
declare -a a=([0]="one.txt" [1]="two three.txt" [2]="foo.bmp")
$ for file in "${a[@]}"; do ls -l "$file"; done
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 one.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 two three.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 foo.bmp
Bash FAQはbashでプログラミングに関する他の優れたヒントがたくさんあります。
あなたはこれを使用することができます:
list=$(find /home/user/Desktop -name '*.pdf' -o -name '*.txt' -o -name '*.bmp')
以外にも、あなたにも「.PDF」(大文字)拡張子を持つファイルをキャッチする-iname
代わり-name
のを使用する場合があります。
あなたは「見つける」何をループにしたい場合は、これを使用する必要があります
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
printf '%s\n' "$file"
done
出典:https://askubuntu.com/questions/343727/filenames-with-spaces-breaking-for-loop-find-command
あなたが引用符を使用する必要がありますスペースを含むファイル名に対処するために ' $ list'の 'for i 'のように、後で$ list'変数を使用します。 echo $ iを実行します。完了しました。二重引用符を使用しない場合、スクリプトはそれぞれの "ファイル名this.jpg"を "ファイル名"、 "好き"、 "this.jpg"の3つのファイルと見なします。 – ash108