選択したファイル拡張子を表示するシェルスクリプトをインポートする

選択したファイル拡張子を表示するシェルスクリプトをインポートする

私はシェルスクリプトとLinuxに初めて遭遇しました。私は私が望むandyファイル拡張子を検索してから、それらのうちのいくつがあるかどうかを示す簡単なプログラムを書いていきます。
オンラインで検索し、私が所有している本を読んでみましたが、とてもわかりません。

これが私が今まで得たものです:

#!/bin/bash

#Program to search for how many of specific file extension there is in this directory.

echo "Write the file extension you want to search for:"
read n

for n in `ls *.txt` ; do
  echo $n
done

forループを使いたいです。

ここで続行するにはどうすればよいですか?

答え1

すでに述べたように、通常はfindファイル操作に適したツールです。しかし、完全に大丈夫かもしれません。

printf必要に応じて、この部分をスキップして使用するだけです。ボーナス:血

使用を開始するもう1つの方法は、printf一般的に優れたオプションですecho。最も単純な形式は次のとおりです。

printf "Some text\n"

\n改行文字はどこにありますか?一部の変数を印刷するには、特殊記号%s(文字列用)を使用できます。

printf "Name is %s \n" "$name"
              |           |
              |           +---- value
              +---------------- format string

printf "Name is %s city is %s \n" "$name" "$city"
              |                      |       |
              |                      +-------+----- values
              +------------------------------------ format string

%d(数字用)などの他の記号を使用することもできます。\t(タブ)などの他の特殊文字を使用することもできます。

$(cmd)コードの場合、通常は「cmd」の代わりに最新のコマンドを使用することをお勧めします。あなたのコードでは次のようになります。

$(ls *.txt)

次に注目すべきはfor屋根です。あなたの声明

for n in `ls *.txt`; do

あなたが思うようにしないでください。これはn変数名として扱われ、結果はls *.txtその変数名に割り当てられます。ファイルがある場合:

a.txt
b.txt
c.txt

コードの実行は次に拡張されます。

for n in a.txt b.txt c.txt; do

つまり、繰り返しごとにn次のファイル名に設定されます。あなたは次のように終わります:

n=a.txt  (first loop)
n=b.txt  (second loop)
n=c.txt  (last loop)

これらを集めて次のように書くことができます。

#!/bin/bash

printf "Write the file extension you want to search for: "
read ext

printf "Searching for files with extension '%s'\n" "$ext"

for file in *"$ext"; do
    printf "File: %s\n" "$file"
done

あるいは、単に次のように言うこともできます。

ls *"$ext"

ちなみにアスタリスクは外部引用符。それ以外の場合は拡張されません。

答え2

おそらく使用する必要がありますfind。それは次のとおりです。

echo "Write the file extension you want to search for:"
read n
find . -name "*.$n"

とにかく、おそらくあなたがしたいことは次のとおりです。

for i in *."$n"
do
    echo "$i"
done

それ以外の場合は、値を使用せずn(代わりに固定拡張を使用)、txtループから読み取られた値を上書きします。nfor

答え3

できます:

#!/bin/bash
echo -n "Write the file extension you want to search for:"
read n
find $1 -iname "*.$n" -print 

使用法:

./myscript.sh mypath

出力は次のとおりです

root@debian:/home/mohsen/test# ./myscript.sh /home/mohsen
Write the file extension you want to search for:sh
/home/mohsen/Downloads/binary files/apt-fast_aria2c.sh
/home/mohsen/Downloads/binary files/apt-fast.sh
/home/mohsen/Downloads/binary files/toggle_touchpad.sh
/home/mohsen/Downloads/binary files/nvidia-versions.sh
/home/mohsen/Downloads/R/x/PacketTracer601/set_ptenv.sh
/home/mohsen/codes/IraninCalendar/test/jcal-master/sources/ltmain.sh
/home/mohsen/codes/IraninCalendar/test/jcal-master/sources/autogen.sh
^C

答え4

必要なandyファイル拡張子を検索し、いくつか見つかったかどうかを確認します。

まったくループする必要はありません。ファイル名に改行文字がないと仮定すると、次のように書くことができます。

wc -l < <(ls *."$n")

関連情報