c 디렉토리에서 시작하여 디렉토리와 하위 디렉토리를 탐색하는 방법(여기서 c는 탐색 스크립트의 입력 매개변수로 사용됨)

c 디렉토리에서 시작하여 디렉토리와 하위 디렉토리를 탐색하는 방법(여기서 c는 탐색 스크립트의 입력 매개변수로 사용됨)

순회 스크립트에 대한 입력 인수로 제공된 c디렉터리 부터 시작하여 디렉터리 구조를 순회하는 쉘 스크립트를 작성하고 싶습니다 .c

  • 순회하는 동안 방문한 각 디렉토리가 화면에 인쇄되기를 원합니다.
  • 디렉토리 외에도 하위 디렉토리, 파일 목록 및 크기도 인쇄하고 싶습니다.
  • 1KB보다 큰 파일은 인쇄해야 합니다.

현재 디렉터리에 있는 파일만 나열할 수 있지만 반복할 수는 없습니다.

그러면 크기와 권한을 포함하여 내 Sample 디렉터리의 모든 파일이 인쇄됩니다. 특정 디렉터리뿐만 아니라 모든 폴더의 디렉터리, 하위 디렉터리 및 파일을 인쇄하기 위해 디렉터리를 입력으로 사용하고 싶기 때문에 이것은 내가 원하는 것이 아닙니다.

#!/bin/bash

for Sample in "$/Sample"/*
do
  ls -l
  #echo "$Sample"
done

#All this did was to print all the directories in my system. This is not what I want
#!/bin/bash

for d in "$dir"/*
do
  echo "$d"
done

#What I am working on now but it is giving me syntax errors near done. -d $file #prints out for directory, while -f $file print out files.
#!/bin/bash

  dir=$dir
for file in ${dir}/*; do
    if [[ -d $file ]]; then
        echo "$file:"
    if [[ -f $file ]]; then
        echo "$file"
    fi
done

답변1

bash쉘에는 최선의 선택이 아닙니다. 그리고 zsh:

#! /bin/zsh -

zmodload zsh/stat || exit

(( $# != 0 )) || set .

files=($^argv/**/*(ND/,.LK+1))
(( $#files == 0 )) ||
  stat -Ln +size -- $files

1KiB(1024바이트)보다 큰 크기 LK+1의 파일(일반 파일만)이 여기에서 선택됩니다. .1KB(1000바이트)보다 큰 파일의 경우 L+1000.

답변2

find단일 명령으로 요구 사항을 충족할 수 있습니다.

$ find path/to/dir \( -type d -o \( -type f -a -size +1024k \) \) -printf '%s %p\n'

이것은 말한다:

  • 디렉토리 선택( -type d)
  • 또는( -o)
  • ( 1024KiB보다 큰 ( -type f) 및 ( ) 파일 선택 ( ))-a-size +1024k
  • -printf바이트 단위의 파일 크기, 파일 경로 및 줄 바꿈( )의 %s %p\n형식화된 인쇄( )

괄호는 그룹화에 사용되지만 쉘에서 해석되지 않도록 백슬래시로 이스케이프해야 합니다.

자세한 설명은 에 있습니다 man find.

이렇게 하면 정확히 1024k가 아닌 1024k보다 큰 파일이 인쇄됩니다.

관련 정보