디렉토리에있는 모든 파일의 절대 경로를 포함하는 파일 (바람직하게는 .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에서 어떻게 이것을 할 수 있습니까?
디렉토리에있는 모든 파일의 절대 경로를 포함하는 파일 (바람직하게는 .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에서 어떻게 이것을 할 수 있습니까?
답변:
ls -d "$PWD"/* > listOfFiles.list
ls -d -1 $PWD/*
-1
옵션은 한 줄에 하나의 파일 이름을 보장합니다
ls
출력이 파일 또는 터미널인지를 감지합니다.
find
답변은 더 많은 파일을 나열하더라도 실패하지 않기 때문에 더 나은 솔루션입니다.
찾기를 사용할 수 있습니다. 일반 파일 만 원한다고 가정하면 다음을 수행 할 수 있습니다.
find /path/to/dir -type f > listOfFiles.list
다른 유형의 파일을 원하는 경우 유형 매개 변수를 적절하게 조정할 수 있습니다.
ls
. 이것은 find
비 디렉토리의 경우 서브 디렉토리를 반복하지만 인수 -maxdepth 1
앞에 추가해야합니다 -type
.
다음에 유의하십시오.
ls -d "$PWD"/* > listOfFiles.list
디렉토리에서 (숨겨지지 않은) 파일 목록을 계산하고 목록을 전달하는 것은 쉘입니다 ls
. ls
그 목록을 여기에 인쇄하기 만하면됩니다.
printf '%s\n' "$PWD"/*
printf
수천 개의 파일이있는 경우 '명령 줄이 너무 깁니다'라는 오류가 발생 printf
하지 않습니다.
printf
빌트인이 아닌 쉘 pdksh
과 그 파생어 또는 대부분의 Bourne 쉘 버전은 예외입니다 . 이에 비해 한 가지 단점 ls -d
은 숨겨지지 않은 파일이 없으면 파일이 인쇄 /path/to/*
되지만 ls
대신 존재하지 않는 파일에 대한 오류가 발생한다는 것입니다.
또 다른과 방법 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에서
sudo apt install tree
우분투 sudo yum install tree
에 CentOS에 sudo zypper install tree
오픈 수세에
brew install tree
Mac
과거의 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