내가 원하는 출력:
diskutil list; diskutil info [multiple devices]
다음을 수행할 필요가 없습니다.
diskutil info disk0; diskutil info disk0s1; diskutil info disk1
...등
예를 들어, 등과 같은 많은 내장 명령이 있는 경우 touch
rm
mkdir
대괄호 확장을 사용하여 파일의 여러 버전에서 명령을 실행할 수 있습니다.
mkdir njboot0{1,2,3}
또는 검색할 때 특수 문자를 사용하여 문자열에서 일치시킬 특정 패턴을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
find ~/ -type f \( -name *mp3 -or -name *mp4 \)
하지만:
diskutil info disk{0,0s1,1,1s1} #syntax error
diskutil info /dev/* #syntax error
(diskutil info disk$'')$'0|1|2' #syntax error
diskutil info disk\(0,s0\) #syntax error
등...
diskutil info disk${disk}'0'$'s1' #okay, getting somewhere. this works at least.
diskutil
여러 디스크에서 위 명령을 올바르게 실행하려면 어떻게 해야 합니까?- 당신은 가지고 있습니까?일반적인확장/대체를 위해 따를 수 있는 구문이 있습니까?
요청에 따라 다음과 같은 결과가 출력됩니다 diskutil list
.
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Macintosh HD 999.7 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
답변1
귀하가 요청하는 중괄호 확장은 사용 중인 패턴과 일치하는 디스크의 파일/디렉토리만 확장합니다. 직면하게 될 또 다른 문제는 diskutil
한 번에 1개 이상의 매개변수를 처리할 수 없다는 것입니다. 이를 확장하려면 while
또는 루프를 수행 하고 for
루프를 반복하면서 결과를 전달해야 합니다.diskutil
예
$ for i in /dev/*; do diskutil "$i";done
두 번째 질문에 대해서는 디스크에 해당 파일/디렉토리가 없으면 중괄호 확장을 사용하여 도움을 줄 수 있는 방법이 실제로 없습니다.
diskutil 구문 분석
이 명령의 출력이 주어지면 추가 쿼리를 위한 두 번째 호출을 위해 디스크에 대한 의미 있는 정보를 얻을 수 있도록 awk
, sed
, 또는 같은 도구를 사용하여 이 출력을 "분석"해야 합니다 .grep
diskutil
예
diskutil
grep
다음 은 를 사용하고 구문 분석하는 출력을 대략적으로 살펴 보겠습니다 sed
. 이를 수행하는 더 효율적인 방법이 있지만 이는 일반적인 접근 방식을 보여줍니다.
$ diskutil list | grep -E "[ ]+[0-9]+:.*disk[0-9]+" | sed 's/.*\(disk.*\)/\1/'
disk0
disk0s1
disk0s2
disk0s3
for
이 접근 방식을 사용하면 위의 루프를 다음과 같이 수정할 수 있습니다 .
$ for i in $(diskutil list | grep -E "[ ]+[0-9]+:.*disk[0-9]+" | \
sed 's/.*\(disk.*\)/\1/'); do diskutil info $i; done
답변2
출력이 diskutil list
다음과 같은 경우 disk0 disk0s1 disk1 disk1s1
(공백이나 개행 문자로 구분) 다음과 같은 것을 원합니다.
for dev in $(diskutil list); do
diskutil info "$dev"
done
찾다
find ~/ -type f \( -name '*mp3' -or -name '*mp4' \)
표시되는 메타문자를 인용해야 합니다 find
.