Linux CLI의 파일 목록은 현재 디렉토리와 관련하여 경로를 사용합니다.
문제
이것은 비슷합니다 이 질문, 그러나 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'를 제거하십시오.