質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

776閲覧

[bash] ホームディレクトリ内のファイル一覧を表示したい

nkt070408

総合スコア29

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/07/24 05:06

bashでホームディレクトリ内に存在する拡張子が.txtのファイルを抽出したいのですがうまくいきません。どのように変更すればよいでしょうか。

以下のソースコードは変数に該当するファイルを抽出し、それらを配列に代入しようとしています。また、最終的にはファイル一覧をソートして選択したファイルの内容を表示するつもりです。

###該当のソースコード
#!/bin/bash

files=ls *.txt
filearray()

for filepath in" ${files}"; do
if [ -f "${filepath}" ] ; then

filearray+=("$filepath")

fi
done

echo "ファイル一覧"
for i in ${filearray[@]}; do

echo "$i"

done
<環境>
VMware Player上のCentOS5.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

files=`find ~/ -name "*.txt"`

かな?

投稿2017/07/24 05:26

k-motoyan

総合スコア78

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nkt070408

2017/07/24 05:35

回答ありがとうございます。自分のほうでも試させていただきました。 findでも出せるんですね。。。
guest

0

ベストアンサー

ご提示されたスクリプトを少し修正してみました(間違っていたので修正しました)

bash

1#!/bin/bash 2 3files='*.txt' 4filearray=() 5 6for filepath in ${files}; do 7 if [ -f "${filepath}" ]; then 8 filearray+=("$filepath") 9 fi 10done 11 12echo "ファイル一覧" 13for i in ${filearray[@]}; do 14 echo "$i" 15done 16

ファイル名にブランクが入っているものが有るといけないのでIFSを付けました”hoge hoge.txt”

bash

1files=`ls -1 *.txt` 2filearray=() 3 4IFS=$'\n' 5for filepath in ${files}; do 6 if [ -f "${filepath}" ]; then 7 filearray+=("$filepath") 8 fi 9done 10 11echo "ファイル一覧" 12for i in ${filearray[@]}; do 13 echo "$i" 14done

ブランク対応の別版

bash

1#!/bin/bash 2 3files='ls -1 *.txt' 4filearray=() 5 6IFS=$'\n' 7for filepath in `eval ${files}`; do 8 if [ -f "${filepath}" ]; then 9 filearray+=("$filepath") 10 fi 11done 12 13echo "ファイル一覧" 14for i in ${filearray[@]}; do 15 echo "$i" 16done

投稿2017/07/24 05:22

編集2017/07/24 06:45
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nkt070408

2017/07/24 05:34

回答ありがとうございます。解決することができました。 ’と”と‘の3つについてもう一度確認してみます。
A.Ichi

2017/07/24 06:36 編集

前のものでも良いですが回答を多少修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問