web-dev-qa-db-ja.com

Bashを使用してディレクトリ内の特定のファイルをループ処理する

ディレクトリには、.txt.shというさまざまなファイルがあり、.foo修飾子なしでファイルを計画します。

lsディレクトリの場合:

blah.txt
blah.sh
blah
blahs

For_loopに.foo変更なしのファイルのみを使用するように指示するにはどうすればよいですか?したがって、上記の例では、何とか何とかファイルに「何かを」します。

基本的な構文は次のとおりです。

#!/bin/bash
FILES=/home/shep/Desktop/test/*

for f in $FILES
do
    XYZ functions
done

ご覧のとおり、これはディレクトリ内のすべてを効果的にループします。 .sh.txt、またはその他の修飾子を除外するにはどうすればよいですか?

私はいくつかのifステートメントで遊んでいますが、これらの変更されていないファイルを選択できるかどうかは本当に興味があります。

また、.txtを使用しないこれらのプレーンテキストファイルの適切な専門用語を教えてもらえますか?

24
jon_shep
#!/bin/bash
FILES=/home/shep/Desktop/test/*

for f in $FILES
do
if [[ "$f" != *\.* ]]
then
  DO STUFF
fi
done
32
David Kiger

少し複雑にしたい場合は、findコマンドを使用できます。

現在のディレクトリの場合:

for i in `find . -type f -regex \.\\/[A-Za-z0-9]*`
do
WHAT U WANT DONE
done

説明:

find . -> starts find in the current dir
-type f -> find only files
-regex -> use a regular expression
\.\\/[A-Za-z0-9]* -> thats the expression, this matches all files which starts with ./
(because we start in the current dir all files starts with this) and has only chars
and numbers in the filename.

http://infofreund.de/bash-loop-through-files/

12
chris2k

負のワイルドカードを使用できますか?それらを除外するには:

$ ls -1
a.txt
b.txt
c.png
d.py
$ ls -1 !(*.txt)
c.png
d.py
$ ls -1 !(*.txt|*.py)
c.png
1
Blender