Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中与其他程序和UDEV一起运行fsck_Bash_Udev_Fsck - Fatal编程技术网

在bash中与其他程序和UDEV一起运行fsck

在bash中与其他程序和UDEV一起运行fsck,bash,udev,fsck,Bash,Udev,Fsck,在经历了很多麻烦之后,我在插入USB后运行了UDEV规则。它运行一个程序来转换图片和电影的名称。我使用{}&在后台运行该程序:唯一的问题是,拔下usb插头很容易损坏。因此,我也想运行fsck。有人有主意吗 以下是UDEV规则: CTION=="add", SUBSYSTEM=="block", ATTRS{idVendor}=="14cd", ATTRS{idProduct}=="121f", RUN+="/home/pi/bashtest.sh" 节目如下: #!/bin/bash sudo

在经历了很多麻烦之后,我在插入USB后运行了UDEV规则。它运行一个程序来转换图片和电影的名称。我使用{}&在后台运行该程序:唯一的问题是,拔下usb插头很容易损坏。因此,我也想运行fsck。有人有主意吗

以下是UDEV规则:

CTION=="add", SUBSYSTEM=="block", ATTRS{idVendor}=="14cd", ATTRS{idProduct}=="121f", RUN+="/home/pi/bashtest.sh"
节目如下:

#!/bin/bash
sudo umount /dev/sda1
sudo fsck -y /dev/sda1
{
dd=1234567890aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
sleep 5
sudo mount -t vfat /dev/sda1 /media/usb1
cd /media/usb1/DCIM/Camera
sudo find /media/usb1/DCIM/Camera -regextype posix-egrep -regex ".*[^/]{13}.JPG"|
for i in *.JPG
do
ddate=$(exiv2 "${i}"|grep timestamp)
SPEC=$ddate
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<${SPEC//:/ }
d1=${YEAR:2}
d2=${dd:(10#$MONTH-1):1}
d3=${dd:(10#$DAY-1):1}
d4=${dd:(10#$HOUR-1):1}
d5=${dd:(10#$MINUTE-1):1}
d6=${dd:(10#$SECOND-1):1}
d7=0
sudo cp -nrv --preserve=all "$i" /media/usb1/DCIM/"${d1}${d2}${d3}${d4}${d5}${d6}${d7}.JPG"
find . -name '*.JPG' -size -1 -delete
done
for i in *.MP4
do
#exiftool -createdate -S -s 20140308_133017.MP4
dddate=$(exiftool "${i}" |grep "Media Create Date" | awk -F':' '{print $2, $3, $4, $5, $6, $7}')
SPEC=$dddate
read YEAR MONTH DAY HOUR MINUTE SECOND <<<${SPEC//:/ }
d1=${YEAR:2}
d2=${dd:(10#$MONTH-1):1}
d3=${dd:(10#$DAY-1):1}
d4=${dd:(10#$HOUR-1):1}
d5=${dd:(10#$MINUTE-1):1}
d6=${dd:(10#$SECOND-1):1}
d7=0
sudo cp -nrv --preserve=all "$i" /media/usb1/DCIM/"${d1}${d2}${d3}${d4}${d5}${d6}${d7}.MP4"
done
sudo umount -l /media/usb1
sleep 5
sudo shutdown -h now
} &
#/bin/bash
sudo umount/dev/sda1
sudo fsck-y/dev/sda1
{
dd=1234567890AABBCCDDEEFFGGHHIIJKKLMNNOOPQQRRSSTTUUVVWXXYYZZ
睡眠5
sudo挂载-t vfat/dev/sda1/media/usb1
cd/媒体/usb1/DCIM/摄像机
sudo find/media/usb1/DCIM/Camera-regextype posix egrep-regex“*[^/]{13}.JPG”|
对于*.JPG中的i
做
ddate=$(exiv2“${i}”| grep时间戳)
规格=$ddate

阅读X年X月日时分秒使用{}&&for fsck和其他{}&让它在后台工作,并帮助我让它工作!

你想在每次插入USB大容量存储设备作为“修复”时运行
fsck
当它们仍在写入时拔出时发生的损坏?哦,天哪,不要修复症状,修复原因,否则迟早会丢失数据。你可能还想用谷歌搜索XY问题。让我们这样说吧,我的父母在Windows中使用它,可能并不总是正确地拔出它,我注意到它会造成一些问题这是我的错误。所以我想经常检查它以确定。其次,当然我正确地卸载了它(据我所知)正如代码所示。因此,当SD拔出时,没有数据仍然被写入SD。这很好,但是运行
fsck-y
很容易导致数据丢失,特别是在它已经损坏的情况下。定期备份,然后才运行
fsck
将是一个更好的选择。此外,我认为这个问题是技术性的同样,我也不认为做
{..}&
会有什么实际好处,因为您正在将其作为脚本中的最后一个命令运行。并且包含
关闭
调用似乎非常奇怪。谢谢您的回复。我是根据UDEV规则运行该程序的。{}&有助于在后台运行程序,否则(覆盆子)的启动将导致无法完全完成程序的错误。关闭是为了让用户看到程序已完成。由于空间有限(许多图片和电影),备份不是一个选项在SD卡上是不够的。上次我检查Windows时,它会自动禁用USB设备上的写缓存,因此,除非您在写入设备时删除它们,否则应该不会有问题。您可以在设备管理器->磁盘驱动器->属性(在有问题的设备上)->策略中检查这一点(快速移除与更好的性能)。不确定这是否适用于硬盘(可能不是),但肯定适用于闪存棒和存储卡。