ls 명령만 사용하여 파일/디렉토리의 전체 경로를 나열하는 방법(제한된 쉘에서 작업)

ls 명령만 사용하여 파일/디렉토리의 전체 경로를 나열하는 방법(제한된 쉘에서 작업)

우리 회사 프로덕션 서버의 셸은 제한되어 있으므로 몇 가지 명령 옵션만 있습니다.

다음 명령을 사용하여 파일/디렉토리의 전체 경로를 얻으려고 합니다.엘에스주문하다. 나할 수 없다제한된 셸에서 xargs, sed, awk를 사용하여 find를 수행하므로 남은 것은 ls 명령의 옵션을 사용하는 것뿐입니다.

다음 명령을 시도했지만 이것이 반복되지 않습니다. 내 질문에 대한 답변을 찾는 동안 이 명령을 발견했기 때문에 이것을 언급합니다.

ls -lRt -d -1 $PWD/{*,.*}

다음은 제한된 셸에서 사용할 수 있는 모든 명령 목록입니다. 분명히 말씀드리겠습니다. 아무것도 만들 수 없어요기능, 사용할 수 없습니다읽다주문하다.

/usr/bin/cat
/usr/bin/clear
/usr/bin/cmp
/usr/bin/cut
/usr/bin/date
/usr/bin/df
/usr/bin/diff
/usr/bin/du
/usr/bin/grep
/usr/bin/head
/usr/bin/id
/usr/bin/ls
/usr/bin/od
/usr/bin/prstat
/usr/bin/ps
/usr/bin/sort
/usr/bin/tail
/usr/bin/wc
/usr/bin/which
/usr/bin/who
cd
echo
exit
pwd

답변1

이 명령은 echo를 사용할 수 있을 때 이 작업을 수행해야 합니다.

ls -Rr1 . |  while read line; do case $line in *:) basepath=${line%:};; "") basepath=;; *) echo "$basepath/$line";; esac; done

답변2

bashNET에서 어떤 하위 집합이 구현되었는지 알 수 있는 방법이 없습니다 rbash. 운이 좋으면 시도해 볼 수 있습니다.

shopt -s globstar ## bash built in 
ls **/* *

( *현재 디렉터리의 파일을 나열하고 **/*깊이에 관계없이 모든 하위 디렉터리의 모든 파일을 나열합니다.)

답변3

다음 함수는 /Even을 사용하지 않고 (기본적으로) 깊이 우선 순서로 디렉터리의 모든 파일을 나열 합니다 ls.

lsr(){
        for f in "$1/"* "$1/".[!.]* "$1/"..?*; do
                test -e "$f" && echo "$f"
                test -d "$f" && lsr "$f"
        done
}

예:

$ lsr .
./dir
./dir/file
./dir/.dotfile
./.foo
./..bar
$ find . -depth
./dir/.dotfile
./dir/file
./dir
./.foo
./..bar
.

이는 함수 대신 별도의 스크립트로 만들 수 있습니다.

#! /bin/sh
for f in "$1/"* "$1/".[!.]* "$1/"..?*; do
        test -e "$f" && echo "$f"
        test -d "$f" && "$0" "$f"
done

관련 정보