1

ファイルの内容を表示する簡単な bash スクリプトを作成しようとしています。

#!/bin/bash

echo 'Input the path of a file or directory...'
read File

if [ -e $File ] && [ -f $File ] && [ -r $File ]
    then
    echo 'Displaying the contents of the file '$File
    cat $File


elif [ -d $File ] && [ -r $File ]
then
echo 'Displaying the contents of the directory '$File       
    for FILE in `ls -R $File`
        do
               cd $File/$FILE
               echo 'Displaying the contents of the file '$FILE
               cat $FILE
        done

else 
echo 'Oops... Cannot read file or directory !'
fi

ユーザーは、ファイルまたはディレクトリ パスを入力する必要があります。ユーザーがファイルを入力すると、プログラムはそのファイルを cat で表示します。ユーザーがディレクトリを入力すると、サブディレクトリ内のファイルを含むすべてのファイルの内容が表示されます。プログラムのその部分はうまく機能しません。「そのようなファイルやディレクトリはありません」などのエラーを表示せず、ファイルの内容のみを表示する結果を得たいと考えています。手伝って頂けますか ?前もって感謝します。

4

3 に答える 3

6

ls -Rは、すべてのサブディレクトリ内のすべてのファイルを見つけるための間違ったツールです。 findはるかに良い選択です:

echo "displaying all files under $File"
find "$File" -type f -printf "Displaying contents of %p\n" -exec cat {} \;
于 2013-10-28T16:41:28.720 に答える
3

実行するだけで、現在のディレクトリ内のすべてのファイルを印刷できます

for f in * do
    cat $f;
done
于 2013-10-28T16:41:12.983 に答える
2

find コマンドを使用すると、多くのロジックを節約できます。

#!/bin/bash 

echo 'Input the path of a file or directory...'
read File
DirName="."

if  echo $File | grep '/' ;  then
  DirName=$(dirname $File)
  File=$(basename $File)
fi

find "$DirName" -type f -name "$File" -exec cat {} \;
find "$DirName" -type d -name "$File" -exec ls {} 

最初の検索では、すべての「通常の」(-type f) ファイル名 $File が検索され、それらが分類されます。2 番目の検索では、すべての「ディレクトリ」が検索され (-type d)、それらが一覧表示されます。

何も見つからない場合、-exec 部分は実行されません。そこにスラッシュがある場合、grepはパスを分割します。

于 2013-10-28T16:43:58.023 に答える