program tip

전체 디렉토리 경로없이 파일 이름 만 표시하려면

radiobox 2020. 12. 10. 19:47
반응형

전체 디렉토리 경로없이 파일 이름 만 표시하려면


ls /home/user/new/*.txt해당 디렉토리의 모든 txt 파일을 인쇄합니다. 그러나 다음과 같이 출력을 인쇄합니다.

[me@comp]$ ls /home/user/new/*.txt
/home/user/new/file1.txt    /home/user/new/file2.txt    /home/user/new/file3.txt

등등.

디렉토리 ls에서가 아닌 명령 을 실행하고 싶으 /home/user/new/므로 전체 디렉토리 이름을 제공해야하지만 출력은

[me@comp]$ ls /home/user/new/*.txt
file1.txt    file2.txt    file3.txt 

나는 전체 경로를 원하지 않습니다. 파일 이름 만 필요합니다. 이 문제는 출력이 다른 프로그램을위한 것이므로 ls 명령을 사용하여 해결해야합니다.


ls whateveryouwant | xargs -n 1 basename

그게 당신에게 효과가 있습니까?

그렇지 않으면 할 수 있습니다 (cd /the/directory && ls)(예, 괄호 사용)


Xargs 및 모든, ls는 충분하지 않습니다.

ls -1 *.txt

행을 현명하게 표시


이를 달성 할 수있는 몇 가지 방법이 있습니다. 하나는 다음과 같습니다.

for filepath in /path/to/dir/*
do
    filename=$(basename $file)

    ... whatever you want to do with the file here
done

(cd dir ; ls)

dir에 파일 이름 만 출력 합니다. ls -1한 줄에 하나씩 원하는 경우 사용하십시오 .


명령 줄에 sed 스크립트를 추가 할 수 있습니다.

ls /home/user/new/*.txt | sed -r 's/^.+\///'

이를 해결하는 멋진 방법은 "rev"와 "cut"을 두 번 사용하는 것입니다.

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev

나는 이미 fge가 대답 한 기본 이름을 선호합니다. 또 다른 방법은 다음과 같습니다.

ls /home/user/new/*.txt|awk -F"/" '{print $NF}'

또 하나의 추악한 방법은 다음과 같습니다.

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1

오래된 문제가 가끔씩 돌아 오는 것처럼 보이기 때문에 누군가에게 도움이되기를 바라며 여기에서 항상 좋은 팁을 찾습니다.

내 문제는 경로가없고 Datastage 7.5 시퀀스의 확장자없이 특정 디렉토리에있는 "* .txt"파일의 모든 이름을 텍스트 파일에 나열하는 것이 었습니다.

우리가 사용한 솔루션은 다음과 같습니다.

ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt

우리가 할 수있는 많은 방법이 있으며 간단히 따라 해 볼 수 있습니다.

ls /home/user/new | tr '\n' '\n' | grep .txt

다른 방법 :

cd /home/user/new && ls *.txt

내 파일 이름에 공백, 따옴표 및 기타 이상한 문자가 있었기 때문에 선택한 대답이 작동하지 않았습니다. 에 대한 입력을 인용하려면 basename다음을 사용해야합니다.

ls /path/to/my/directory | xargs -n1 -I{} basename "{}"

이것은 파일이 무엇인지에 관계없이 작동하도록 보장됩니다.

참고 URL : https://stackoverflow.com/questions/8518750/to-show-only-file-name-without-the-entire-directory-path

반응형