쉘 스크립트에서 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를 사용하십시오. 텍스트에 텍스트 합계가 포함되어 있으면 합계를 공백으로 구분된 두 번째 필드로 설정하고, 그렇지 않으면 파일 이름을 첫 번째로 구분된 부분으로 설정합니다. 마지막으로 원하는 형식으로 데이터를 인쇄합니다.

관련 정보