![c 디렉토리에서 시작하여 디렉토리와 하위 디렉토리를 탐색하는 방법(여기서 c는 탐색 스크립트의 입력 매개변수로 사용됨)](https://linux55.com/image/187313/c%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%EC%84%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%99%80%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20%ED%83%90%EC%83%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(%EC%97%AC%EA%B8%B0%EC%84%9C%20c%EB%8A%94%20%ED%83%90%EC%83%89%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%EC%9E%85%EB%A0%A5%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A1%9C%20%EC%82%AC%EC%9A%A9%EB%90%A8).png)
순회 스크립트에 대한 입력 인수로 제공된 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보다 큰 파일이 인쇄됩니다.