스크립트에서 NTFS/exFAT 파일 시스템 유형을 감지하는 방법

스크립트에서 NTFS/exFAT 파일 시스템 유형을 감지하는 방법

사용자는 를 사용하여 rsync외부 장치에 대한 (증분) 백업 스크립트를 가지고 있습니다. 그가 가지고 있던 SSD의 버그였습니다. 그의 장치가 포맷된 것으로 밝혀졌습니다 exFAT. 이는 내가 이것을 감지해야 함을 의미합니다.스크립트에서, 옵션을 변경해야 하기 때문입니다 rsync(예: exFAT는 심볼릭 링크를 처리할 수 없고 소유자/그룹 권한이 없습니다 등).

사용자는 Linux Mint를 실행하고 있습니다. 나는 우분투를 실행합니다. 내 Ubuntu 솔루션이 그의 Mint에서도 작동할 것이라고 가정/희망할 뿐입니다.

나는 본 적이:

좋은 제안이 많이 있지만 다음과 같은 내 요구 사항을 충족하는 제안은 없습니다.

  • (구문 분석 가능) ntfs/는 단순히 exfat말한 것이 아니라 명시적으로 보고되어야 합니다(이것은 fuseblk& 모두에 해당됩니다. 구별해야 합니다).exfatntfs
  • ~ 해야 하다아니요필요하다스도.
  • /dev/...실행 파일 은 .

내가 시도한 제안 중에서:

  • fdisk -l, parted -l, file -sL: 필요하다스도및/또는 /dev/...블록 장치
  • mount: 필수 /dev/..., 보고 전용fuseblk
  • df -T, stat -f -c %T: 디렉토리를 허용하지만 보고만 합니다.fuseblk
  • lsblk -f, blkid: /dev/...블록 장치가 필요합니다

이러한 모든 기준을 충족하는 간단한 명령이 있습니까? 또는 lsblk/가 /를 blkid올바르게 보고하는 것 같습니다 . 이를 전달해야 하는 경우 스크립트의 디렉터리 경로에서 적절하게 가져오려면 어떻게 해야 합니까?exfatntfs/dev

답변1

다른 게시물의 답변/제안을 보내주셔서 감사합니다. 여기 내 완전한 솔루션이 있습니다.

df -P경로에서 장치를 가져오는 데 사용할 수 있으며 lsblk --fs정확한 파일 시스템을 가져오기 위해 제공할 수 있습니다. 따라서 한 줄은 다음과 같습니다.

fs=$( lsblk --fs --noheadings $( df -P $path | awk 'END{print $1}' ) | awk 'END{print $2}' )

당신이 알아야 할 것이 파일 시스템이 무엇인지만 알고 있다면 fuseblk--- 그것은 내 목적에 충분 ntfs하고 exfat충분하다는 것이 밝혀졌습니다 --- 이것은 더 간단한 방법으로 결정할 수 있습니다:

fs=$( stat -f -c '%T' $path )

답변2

귀하의 질문을 완전히 이해했는지 잘 모르겠습니다. 따라서 이것을 "시작점"으로 사용하겠습니다. 가까이 다가가면 필요한 것을 얻을 수 있도록 조정할 수 있다고 확신합니다.

$ lsblk --fs | grep / | awk '{print $1, $2}'  

답변3

df .그리고 mount?

먼저 마운트 포인트를 구해보자

 cd /a/dir
 mp=$(df . | awk 'NR==2 { print $1}')
  • $mp기기 이름을 누른 상태에서 길게 누르기/a/dir

이제 마운트 지점

mount | awk -v mp=$mp '$1 == mp { print $5}'

이는 설치 유형을 반환해야 합니다( xfs,, etx3...일 수 있음).

편집하다:

  • 내 대답이 링크 중 하나에 포함되어 있는 것을 확인했습니다. 단순히 마운트하는 것보다 mount에서 반환된 줄을 탐색하고 싶을 수도 있습니다.$5

관련 정보