현재 일부 bash 스크립팅을 배우고 주어진 디렉토리의 모든 파일을 나열하고 파일인지 디렉토리인지 여부를 나타내는 질문에 문제가 있습니다. 내가 가지고있는 문제는 현재 디렉토리 만 얻거나 디렉토리를 지정하면 디렉토리라고 말할 것입니다. / home / user / shell_scripts는 shell_scipts가 그 안에 포함 된 파일이 아니라 디렉토리를 반환합니다. 이것이 내가 지금까지 가지고있는 것입니다.
dir=$dir
for file in $dir; do
if [[ -d $file ]]; then
echo "$file is a directory"
if [[ -f $file ]]; then
echo "$file is a regular file"
fi
done
귀하의 라인 :
for file in $dir; do
$dir
단일 디렉토리 문자열로 확장됩니다 . 해야 할 일은 디렉토리의 파일 목록으로 확장하는 것입니다. 다음을 사용하여이를 수행 할 수 있습니다.
for file in "${dir}/"* ; do
그러면 "${dir}/"*
섹션이 현재 디렉토리의 이름 전용 목록으로 확장됩니다 . Biffen이 지적했듯이 이것은 파일 목록에 file
공백이 포함 된 부분 파일 이름으로 끝나지 않도록 보장해야합니다 .
디렉토리로 재귀하려면 dir
사용 find
하는 것이 더 나은 방법 일 수 있습니다. 간단히 사용 :
for file in $( find ${dir} ); do
간단하지만 공백이있는 파일이나 디렉토리는 처리 하지 않습니다 . 이 때문에 루프를 삭제하고 한 번에 출력을 생성하고 싶을 것입니다. 이것은 당신이 원하는 것과 약간 다를 수 있지만, 특히 많은 수의 파일에서 읽기 쉽고 훨씬 더 효율적일 것입니다. 예를 들어, 모든 디렉토리를 나열하려면 :
find ${dir} -maxdepth 1 -type d
파일을 나열하려면 :
find ${dir} -maxdepth 1 -type f
아래 디렉토리로 반복하려면 -maxdepth 1
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다