약 40개의 파일이 존재한다면 나열하고 싶은 특정 파일 순서가 있습니다. 일종의 우선순위. 그래서 나는 다음을 시도한다:
ls -1d /opt/foo/lib.jar /opt/bar/lib.jar
/opt/foo/lib.jar
둘 다 존재한다면 이것이 먼저 나열될 것으로 기대합니다. 그러나 실제로는 bar
첫 번째 항목과 foo
그 뒤에 오는 항목을 인쇄합니다.
ls
매개변수에 지정된 순서대로 항목을 나열하는 방법이 있습니까 ?
아니면 다른 대안이 있나요 find
?
답변1
GNU를 사용하면 ls
다음 -U
옵션을 시도해 볼 수 있습니다.
-U
: 정렬하지 않고 항목을 디렉토리 순서로 나열합니다.
(그러나 여기서는 디렉토리의 내용을 나열하지 않으므로 중요한 부분은 다음과 같습니다.정렬되지 않음).
$ ls -1dU /opt/foo/lib.jar /opt/bar/lib.jar
/opt/foo/lib.jar
/opt/bar/lib.jar
약간 더 이식성이 높으며(GNU 및 FreeBSD에서는 작동 ls
하지만 레거시 ls
구현이나 POSIX에서는 작동하지 않음) 다음을 사용할 수 있습니다 ls -1df
.
$ ls -1df /opt/foo/lib.jar /opt/bar/lib.jar
/opt/foo/lib.jar
/opt/bar/lib.jar
답변2
언급한 후에 find
경로 매개변수로 여러 경로를 사용할 수 있다는 것을 알았습니다. 그래서 간단합니다.
find /opt/foo/lib.jar /opt/bar/lib.jar -prune 2> /dev/null
답변3
ls
ls
각 인수를 호출하여 인수(주어진 순서대로)를 반복하는 래퍼 함수를 만들 수 있습니다 .
myls() {
for arg do
ls -d -- "$arg"
done
}
Stéphane의 답변을 참조하세요.for 루프에서 $1 $2...와 같은 매개변수를 사용하는 방법은 무엇입니까?문법 용 for arg do
.
답변4
존재 여부를 확인하고 테스트하려는 경로 이름 목록이 있는 경우 존재하는 경로 이름, 존재하지 않는 경로 이름 또는 두 경로 이름 집합을 사용하여 작업을 수행한다고 가정합니다.
표준 쉘이 주어지면 이는 루프에서 수행되는 것이 가장 좋습니다.
for pathname in /the/first/path /the/second/path /some/other/path
do
if [ -e "$pathname" ]; then
printf 'Path "%s" exists\n' "$pathname"
else
printf 'Path "%s" does not exist\n' "$pathname"
fi
done