シェルスクリプトで find コンテンツを表示する方法

シェルスクリプトで find コンテンツを表示する方法

ディレクトリに必要なファイルの総数を表示するためにこのスクリプトを実行してみましたが、機能しません。

echo "please enter your directory: "
Read directory 
Echo -e "Please enter your project name: "
Read projName
find $directory -type f -name ' $projName ' -exec du -ch {} + | while read file; do 
echo "Reading $file"
Echo $file | grew total$

答え1

「役に立たない」とはどういう意味ですか?

スクリプトに関連するいくつかの問題は次のとおりです。

オリジナル

#!/bin/bash
echo "Please enter directory: "
read directory
echo -e "Please enter project name: "
read projName
find $directory -type f -name ' $projName ' -exec du -ch {} + | while read file; do
echo "Reading $FILE..."
echo $FILE | grep total$
done

修正する

#! /bin/bash -
read -p "Please enter a directory: " directory    # Shorter
read -p "Please enter a project name: " projName    # Shorter
find "$directory" -type f -name "$projName" | while read file; do #Always double quote your variables.  The single quotes around projName prevented it from being expanded.
echo "Reading $file..."  # $FILE is not a valid variable in your script
du -ch "$file"          # this being in an exec statement was feeding bad info to your while loop.
cat "$file" | grep 'total$'   # $FILE is not a valid variable in your script.  I think you want to cat the contents of the file and not echo it's filename.
done

答え2

ディレクトリの合計サイズを一覧表示したい場合:

du -c最後に「合計」数字(バイト単位)が与えられます。

du -ck最後に、「合計」数をキロバイト単位(約)で指定します。

ノート:上記の内容はすべて、各ファイルのファイルサイズとフルサイズを提供します。各ファイルサイズを望まない場合は、次を使用します。-s

du -sk(およそ)キロバイト単位の「合計」数だけを提供します。

答え3

find <pathtodirectory> -name '$projName' -exec du -ch '{}' \; | awk '/total/ { tot=+$1 } $0 !~ "total" { print "Reading "$2"...\n" } END { print "Space "tot"\n"}'

出力を解析するには awk を使用します。テキストにテキストの合計が含まれている場合は、合計をスペースで区切られた2番目のフィールドに設定し、それ以外の場合はファイル名を最初の区切り部分に設定します。最後に、目的の形式でデータを印刷します。

関連情報