우리 회사 프로덕션 서버의 셸은 제한되어 있으므로 몇 가지 명령 옵션만 있습니다.
다음 명령을 사용하여 파일/디렉토리의 전체 경로를 얻으려고 합니다.엘에스주문하다. 나할 수 없다제한된 셸에서 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
bash
NET에서 어떤 하위 집합이 구현되었는지 알 수 있는 방법이 없습니다 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