[bash] 디렉토리에있는 파일의 경우 echo 파일 이름 만 (경로 없음)

for 루프로 디렉토리를 반복하는 경우 파일의 파일 이름 만 에코하려면 어떻게해야합니까?

for filename in /home/user/*
do
  echo $filename
done;

파일 이름으로 전체 경로를 가져옵니다. 파일 이름 만 알고 싶습니다.



답변

네이티브 bash솔루션 을 원하는 경우

for file in /home/user/*; do
  echo "${file##*/}"
done

위는 셸 고유의 매개 변수 확장 을 사용 하며 다음과 같은 외부 바이너리에 대한 호출이 필요하지 않습니다.basename

그러나 사용하는 것이 좋습니다. find

find /home/user -type f -printf "%f\n"


답변

그냥 사용하십시오 basename:

echo `basename "$filename"`

$ filename에 공백 등이 포함 된 경우 따옴표가 필요합니다.


답변

사용 basename:

echo $(basename /foo/bar/stuff)


답변

또 다른 방법은 ls디렉토리 내의 파일 목록을 읽을 때 사용 하여 원하는 것을 제공하는 것입니다. 즉 “파일 이름 만”입니다. 전체 파일 경로를 읽은 다음 for 루프 본문에서 “파일 이름”구성 요소를 추출하는 것과 반대입니다.

원본을 따르는 아래 예 :

for filename in $(ls /home/user/)
do
  echo $filename
done;

파일과 동일한 디렉토리에서 스크립트를 실행하는 경우 다음과 같이됩니다.

for filename in $(ls)
do
  echo $filename
done;


답변

파일 이름 만 원하는 경우 :

for file in /home/user/*; do       
  f=$(echo "${file##*/}");
  filename=$(echo $f| cut  -d'.' -f 1); #file has extension, it return only filename
  echo $filename
done

cut명령에 대한 자세한 내용 은 여기를 참조 하십시오 .


답변