我想要将 USB 驱动器与位于 NTFS 分区上的文件夹同步,该分区在启动时未安装。我找到了一个命令可以做到这一点:rsync -axu /media/USB/folder /home/user/folder
。但我必须已经安装 NTFS 驱动器。
如何通过脚本检测 NTFS 驱动器是否已安装以及是否不安装?我使用 Linux(Ubuntu)。
这是修改后的小脚本(原来是这里)在你的帮助下!
#!/bin/bash
## CONFIG SECTION
MOUNT_DRIVE=/dev/disk/by-id/scsi-SATA_Hitachi_HTS5416_SB3404GRGJRKBS-part5
MOUNT_POINT=/media/Windows/
# Local folder to sync with
SYNC_LOC=/media/Windows/vasia/Disertatie/
# Device folder to sync with
SYNC_DEV=Disertatie
#
## SCRIPT SECTION
#verify if the drives are mounted
if mount | grep -q "/media/Windows/"; then
#device is mounted
echo "Windows NTFS Drive is mounted!"
else
#device is not mounted,let's mount it
mount $MOUNT_DRIVE $MOUNT_POINT
fi
# Wait for thumbdrive to settle
sleep 10
# Synchronize thumbdrive with local
rsync -axu /media/DISK_IMG/${SYNC_DEV}/ ${SYNC_LOC}/
# Synchronize local with thumbdrive
#rsync -axu ${SYNC_LOC}/ /media/disk/${SYNC_DEV}/
# Inform user that synchronization is complete.
zenity --title "Thumbdrive Sync" \
--info --text "File synchronization complete."
答案1
有很多方法可以检查特定目录是否是挂载点,例如(在 Linux 下)检查挂载点列表
if ! </proc/mounts awk '$2 == "/mount/point" {exit(0)} END {exit(1)}'; then
mount /mount/point
fi
或(可移植地)检查路径的文件系统的安装点是否是其本身
if ! df -P /mount/point | grep -q '/mount/point$'; then
mount /mount/point
fi
如果可能的安装点可能是符号链接,则查看该目录是否位于与其父目录不同的文件系统上:
if df -P /mount/point/. /mount/point/.. | {
read -r _; read -r dev1 _; read -r dev2 _
[ "$dev1" = "$dev2" ]
}; then
mount /mount/point
fi
另一种方法是使用自动安装器访问目录时自动挂载该目录。例如,在 Linux 上,您可以使用自动文件系统:
- 取消注释
/etc/auto.master
其中的行/misc /etc/auto.misc
- 中
/etc/auto.misc
,添加windows_stuff -fstype=ntfs :/dev/sdz99
(替换sdz99
为你要挂载的分区) - 创建符号链接
/home/user/folder
→/misc/windows_stuff
- 运行
/etc/init.d/autofs reload
(或者任何告诉autofs
您在您的发行版上重新加载其配置的命令)。
答案2
使用mountpoint
命令:
mountpoint -q $MOUNT_POINT || mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT
||
仅当第一部分为 false(即安装点不存在)时才执行后一部分(after )。
答案3
关于如何做到这一点还有另一种解决方案。您可以在NTFS文件系统中创建一个文件,然后检查该文件是否存在。对于您的情况,其他解决方案可能更好。但是,如果您需要检查 NFS 或 SMB 文件系统是否已挂载,有时最好检查文件,因为您希望确保它不仅已挂载,而且还可以访问。然后你会这样做:
if [ ! -f /your/mounted/fs/mount-check.txt ];
then
echo "Here you have to put your mount command."
fi
答案4
您可以通过发出简单命令来检查安装的内容mount
。它还告诉您每个安装点的“源设备”。
如果您使用其中的设备/dev/disk/by-id
来安装 NTFS 卷,那么您将拥有一个可以在脚本中检查的固定名称,而不是/dev/sd*
可以在重新启动和驱动器连接事件之间更改的名称。
因此,类似这样的事情可以检查是否存在已安装的驱动器bash
:
if mount | grep -q "/dev/disk/by-id/$DEVICE_WITH_NTFS_FILESYSTEM"; then
# device is mounted
;; # do nothing
else
# device is not mounted, let's mount it
mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT
fi