Linux CLI의 파일 목록은 현재 디렉토리와 관련하여 경로를 사용합니다.

StackOverflow https://stackoverflow.com/questions/245698

  •  05-07-2019
  •  | 
  •  

문제

이것은 비슷합니다 이 질문, 그러나 UNIX의 현재 디렉토리와 관련된 경로를 포함하고 싶습니다. 다음을 수행하면 :

ls -LR | grep .txt

전체 경로가 포함되지 않습니다. 예를 들어 다음과 같은 디렉토리 구조가 있습니다.

test1/file.txt
test2/file1.txt
test2/file2.txt

위의 코드는 다음과 같습니다.

file.txt
file1.txt
file2.txt

표준 UNIX 명령을 사용하여 현재 디렉토리와 관련된 경로를 포함하도록하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

찾기 사용 :

find . -name \*.txt -print

대부분의 GNU/Linux 배포판과 마찬가지로 GNU Find를 사용하는 시스템에서는 -Print를 제거 할 수 있습니다.

다른 팁

사용 tree, 와 함께 -f (전체 경로) 및 -i (들여 쓰기 선 없음) :

tree -if --noreport .
tree -if --noreport directory/

그런 다음 사용할 수 있습니다 grep 원하는 것을 필터링합니다.


명령을 찾을 수없는 경우 설치할 수 있습니다.

Rhel/Centos 및 Fedora Linux에 트리 명령을 설치하려면 다음 명령을 입력하십시오.

# yum install tree -y

Debian/Ubuntu를 사용하는 경우 Mint Linux 유형 다음 명령을 터미널에서 사용합니다.

$ sudo apt-get install tree -y

노력하다 find. Man Page에서 정확히 찾을 수는 있지만 다음과 같습니다.

find [start directory] -name [what to find]

그래서 당신의 예를 위해

find . -name "*.txt"

당신이 원하는 것을 주어야합니다.

대신 찾을 수 있습니다.

find . -name '*.txt'

그것은 트릭을합니다 :

ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

그러나 그것은 구문 분석과 함께 "죄"함으로써 그렇게합니다. ls, 그러나 GNU 및 Ghostscript 커뮤니티에 의해 나쁜 형태로 간주됩니다.

DIR=your_path
find $DIR | sed 's:""$DIR""::'

'sed'는 모든 '찾기'결과에서 'your_path'를 지울 것입니다. 그리고 당신은 'dir'경로에 비해받습니다.

찾기 명령을 사용하여 원하는 파일의 실제 전체 경로 파일 이름을 얻으려면 PWD 명령과 함께 사용하십시오.

find $(pwd) -name \*.txt -print

다음은 Perl 스크립트입니다.

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if ($_ =~ /^\s+/);
        if ($_ =~ /(^\w+(\/\w*)*):/)
        {
            $tmppath = $1 if defined $1;    
            next;
        }
        print "$tmppath/$_";
    }
}

sub main()
{
        my @lines = ();

    while (<>) 
    {
        push (@lines, $_);
    }
    format_lines(\@lines);
}

main();

용법:

ls -LR | perl format_ls-LR.pl

예를 들어 쉘 기능을 만들 수 있습니다. .zshrc 또는 .bashrc:

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

첫 번째는 단일 파일에서만 작동합니다.

루트 디렉토리에서 검색을 시작하는 파일 시스템에서 "Filename"이라는 파일을 찾으십시오. "/". "파일 이름"

find / -name "filename" 

세부 사항을 보존하려면 출력에 파일 크기 등 LS와 함께 제공되면 작동해야합니다.

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file

이 기능을 이와 같이 구현할 수 있습니다
첫째, LS 명령을 사용하여 대상 디렉토리를 가리 킵니다. 나중에 찾기 명령 필터를 사용하여 결과를 사용합니다. 당신의 경우에서, 그것은 것처럼 들린다 - 항상 파일 이름은 단어로 시작합니다.file***.txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)

에서 생선 Shell, 현재 디렉토리에있는 것을 포함하여 모든 PDF를 재귀 적으로 나열하기 위해이 작업을 수행 할 수 있습니다.

$ ls **pdf

모든 유형의 파일을 원하시면 'PDF'를 제거하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top