절대 경로가있는 디렉토리의 모든 파일을 나열하는 방법


30

디렉토리에있는 모든 파일의 절대 경로를 포함하는 파일 (바람직하게는 .list 파일)이 필요합니다.

dir1 예 : file1.txt file2.txt file3.txt

listOfFiles.list:

/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt

linux / mac에서 어떻게 이것을 할 수 있습니까?

답변:


30
ls -d "$PWD"/* > listOfFiles.list

이것은 빨간 모자 리눅스에서 작동합니까?
arabian_albert

4
이 명령은 모든 Linux 또는 UNIX 운영 체제에서 작동합니다. 한 줄에 하나의 파일을 얻으려면 다음을 사용해야합니다.ls -d -1 $PWD/*
MelBurslan

1
파일 이름이 길거나 터미널 너비가 좁은 경우, 그렇습니다.하지만 전체 화면을 차지하도록 터미널 창을 최대화했다고 말하거나 파일 이름 (경로 포함)이 실제로 짧아서 보관하지 않을 것입니다 참된. -1옵션은 한 줄에 하나의 파일 이름을 보장합니다
MelBurslan

7
@MelBurslan의 추가는 출력이 터미널에있는 경우에만 필요합니다. ls출력이 파일 또는 터미널인지를 감지합니다.
Runium

9
디렉토리에 수천 개의 파일이있는 경우, 즉 최대 명령 줄 크기를 초과 할 수있을 경우 (쉘이 전체 경로로 파일 이름을 확장 할 가능성이 높아짐) 실패합니다. @Andy Dalton의 find답변은 더 많은 파일을 나열하더라도 실패하지 않기 때문에 더 나은 솔루션입니다.
cas

33

찾기를 사용할 수 있습니다. 일반 파일 만 원한다고 가정하면 다음을 수행 할 수 있습니다.

find /path/to/dir -type f > listOfFiles.list

다른 유형의 파일을 원하는 경우 유형 매개 변수를 적절하게 조정할 수 있습니다.


7
보다 미래 지향적 인 솔루션을 가리 키기 위해 +1하십시오 ls. 이것은 find비 디렉토리의 경우 서브 디렉토리를 반복하지만 인수 -maxdepth 1앞에 추가해야합니다 -type.
kubanczyk

@AndyDalton bash에서 배열과 같은 것을 얻는 방법
Kasun Siyambalapitiya

13

다음에 유의하십시오.

ls -d "$PWD"/* > listOfFiles.list

디렉토리에서 (숨겨지지 않은) 파일 목록을 계산하고 목록을 전달하는 것은 쉘입니다 ls. ls그 목록을 여기에 인쇄하기 만하면됩니다.

printf '%s\n' "$PWD"/*

3
를 사용 하면 별도의 프로세스로 실행되지 않는 printf수천 개의 파일이있는 경우 '명령 줄이 너무 깁니다'라는 오류가 발생 printf하지 않습니다.
Adrian Pronk 2018 년

2
@AdrianPronk, 예. printf빌트인이 아닌 쉘 pdksh과 그 파생어 또는 대부분의 Bourne 쉘 버전은 예외입니다 . 이에 비해 한 가지 단점 ls -d은 숨겨지지 않은 파일이 없으면 파일이 인쇄 /path/to/*되지만 ls대신 존재하지 않는 파일에 대한 오류가 발생한다는 것입니다.
Stéphane Chazelas

10

일반 파일 만 보려면-

find "$PWD" -type f  > output

3

당신은 사용할 수 있습니다 realpath또는 readlink:

ls | xargs realpath
  • xargs 표준 입력에서 명령 행을 빌드하고 실행하십시오.
  • realpath: 정규화 된 절대 경로 이름을 반환
  • readlink: 심볼릭 링크의 값을 읽습니다.

realpath : 명령을 찾을 수 없음
rogerdpack

@rogerdpack coreutils 패키지가 설치되어 있습니까? 로 정보를 얻습니다 dpkg -S /usr/bin/realpath. 이것을 확인하십시오 .
Pablo A

3

또 다른과 방법 tree:하지가 반복적으로, 여기 간다 언급과는 달리 찾기 또는 LS 당신은 (같은 오류가없는 Permission denied, Not a directory당신이 파일을 먹이고 싶은 당신은 또한 경우에 절대 경로를 얻을) xargs또는 기타 명령

tree -fai /pathYouWantToList >listOfFiles.list

옵션 의미 :

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.

설치하려면 tree:

sudo apt install tree 우분투 / 데비안

sudo yum install tree CentOS / Fedora에서

sudo zypper install tree OpenSUSE에서


1
나무 : 명령을 찾을 수 없음
rogerdpack

@rogerdpack sudo apt install tree우분투 sudo yum install tree에 CentOS에 sudo zypper install tree오픈 수세에
에드워드 Florinescu

1
brew install treeMac
oOEric

2

과거의 Linux 환경에서는 resolve상대 경로를 절대 경로로 만드는 것을 포함하여 경로를 표준화 하는 명령이 있었습니다 . 지금은 찾을 수 없으므로 해당 조직의 누군가가 작성한 것일 수 있습니다.

Python 또는 Perl 표준 라이브러리 (및 아마도 다른 언어)의 함수를 사용하여 고유 한 스크립트를 만들 수 있습니다.

resolve.py :

#!/bin/env python

import sys
import os.path

for path in sys.argv:
    print os.path.abspath(path)

resolve.pl :

#!/bin/env perl

use warnings;
use Cwd qw ( abs_path );

foreach (@ARGV) {
    print abs_path($_), "\n";
}

그런 다음 다음을 사용하여 문제점을 해결하십시오.

resolve.py * > listOfFiles.list

이 명령으로 다음과 같은 작업을 수행 할 수도 있습니다.

cd /root/dir1/dir2/dir3
resolve.py ../../dir4/foo.txt
# prints /root/dir1/dir4/foo.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.