디렉토리에서 특정 이름을 가진 모든 파일을 검색하고 ls -l을 적용하여 크기를 확인하고 싶습니다. 먼저 이것을 사용했지만 find . -name .ycm* | ls -l
작동하지 않습니다. 설명은 다음에서 얻었습니다.이 링크.
ls -l
그런 다음 디렉터리를 반복적으로 탐색하고 파일 이름을 검색하고 해당 파일에 대해 작업을 수행하거나 다른 명령을 실행하는 스크립트를 생성하려고 합니다 .
다음 스크립트를 사용했지만 첫 번째 호출 자체에서 멈춰서 계속 호출하고 있는 것으로 나타났습니다.
#!/bin/bash
for_count=0
file_count=0
dir_count=0
search_file_recursive() {
# this function takes directory and file_name to be searched
# recursively
# :param $1 = directory you want to search
# :param $2 = file name to be searched
for file in `ls -a `$1``:
do
let "for_count=for_count+1"
echo "for count is $for_count"
# check if the file name is equal to the given file
if test $file == $2
then
ls -l $file
let "file_count++"
echo "file_count is $file_count"
elif [ -d $file ] && [ $file != '.' ] && [ $file != '..' ]
then
echo "value of dir = $1 , search = $2, file = $file"
search_file_recursive $file $2
let "dir_count++"
echo "directory_count is $dir_count"
fi
done
return 0
}
search_file_recursive $1 $2
이것은 에코가 없는 내 출력의 모습입니다.
anupam … YouCompleteMe third_party ycmd ae8a33f8 … 5 ./script.sh pwd .ycm_extra_conf.py
Segmentation fault: 11
anupam … YouCompleteMe third_party ycmd ae8a33f8 … 5 echo $?
139
답변1
GNU를 사용하여 find
파일 이름이 패턴과 일치하는 일반 파일의 크기(바이트)를 얻으려면 .ycm*
다음을 수행할 수 있습니다.
find . -type f -name '.ycm*' -printf '%s\t%p\n'
그러면 크기가 인쇄되고 그 뒤에 탭 문자와 파일의 경로 이름이 표시됩니다. 명령줄에서 쉘 글로빙 패턴으로 사용하지 않으려면 파일 이름 패턴의 인용에 유의하세요.
다음은 stat
유사한 방식으로 각 파일에 대해 외부 명령을 사용합니다(Linux에만 해당).
find . -type f -name '.ycm*' -exec stat --printf '%s\t%n\n' {} +
다음은 BSD 시스템(예: macOS)에 적용됩니다.
find . -type f -name '.ycm*' -exec stat -f '%z%t%N' {} +
BSD stat
형식 문자열 에서는 %z
바이트 단위의 크기로 대체되고 %t
탭 문자로 대체되며 %N
파일의 경로 이름으로 대체됩니다.
또한보십시오:
stat(1)
시스템의 수동( )입니다man 1 stat
.- "find"의 -exec 옵션 이해