for 루프 반복, 어떻게 디렉토리 출력을 무시합니까?디렉토리에있는 파일의 경우 폴더 무시
for filename in /home/user/*
do
echo $filename
done;
for 루프 반복, 어떻게 디렉토리 출력을 무시합니까?디렉토리에있는 파일의 경우 폴더 무시
for filename in /home/user/*
do
echo $filename
done;
을 내 previous answer 당신이 정말로 find
를 사용하고 싶습니다. 당신이 라인 스크립팅의 7-10에서 수행하려는 것은 바로이 수행 할 수 있습니다 :
find /home/user ! -type d -maxdepth 1
당신은 $filename
가 디렉토리를 참조하는지 여부를 확인하기 위해 -d
연산자를 사용할 수 있습니다
for filename in /home/user/*
do
if [ ! -d "${filename}" ]
then
echo $filename
fi
done;
세부 사항 및 기타 사용 가능한 연산자에 대한 test manpage를 참조하십시오.
당신은 또한 find command 사용할 수 있습니다 마찬가지로
find /home/user -not -type d -maxdepth 1
while IFS='$\n' read -r filename
do echo "$filename"
done < <(find /home/user/ -type f -maxdepth 1)
for filename in /home/user/*
do
if [ ! -d "$filename" ]; then
echo $filename
fi
done
또는에서, find
명령을 사용하여 문 내부의 루프. 이 (안된)와 같은 뭔가 :이 디렉토리, 그리고 그는 !
로 반전 않다면
if [ ! -d "$filename" ]
then
// do stuff
fi
-d
는 사실이다. 존재하고 디렉토리가 아니라면 성공할 것입니다.
이것은 정답입니다 ('find'와 쉘 상호 작용을 얻으려면 하드임을 강조하자. –
첫 번째 코드 부분을 그대로 사용하면 폴더의 내용 대신에'/ home/user/*'가 표시된다. – Mechaflash
@Mechaflash 그러면'/ home/user'는 비어 있거나 숨겨진 파일 만 있습니다. 숨겨진 파일을 얻으려면'find'명령으로'/ home/user /.*'또는'find'를 사용할 수 있습니다 Jo So Hints와 같이) 당신이 그것을 어떻게 사용하는지 알려줄 필요가 있습니다. – Kevin
당신은 조건부을 사용할 수 있습니다
find /home/user -type f -printf "%f\n"
find 명령이 원하는대로 더 적합합니다.
find /home/user -type f
실제로 사용해 보셨습니까? 잘못된. –
@JoSo 감사합니다. 다음에'\ n'을 잊었다 고 말할 수 있습니다. – SiegeX
네, 혹은 그보다 더 나은 방법은'find/home/user -type f'를 사용하거나 OP가 원하는 것을하기 위해서'find/home/user -not type d'로 바꿉니다 ;-) –