我发现了其他几个这样的问题,但他们的答案并不符合我的要求。
对于视频流录制项目,我编写了一个脚本,用于搜索"免费名称"这将被返回到录制程序,因此不会覆盖相同的文件:
#!/bin/bash
AUFPFAD="$1"
DATEINUMMER=0
DATEISTRING=""
ERLEDIGT="nein"
TESTING=1
if [ $DATEINUMMER -eq 0 ]; then
if [ -d "$AUFPFAD/temp.mp4" ]; then
if [ $TESTING -eq 1 ]; then
echo "Die Datei $AUFPFAD/temp.mp4 ist vorhanden!"
fi
DATEINUMMER=$DATEINUMMER+1;
else
if [ $TESTING -eq 1 ]; then
echo "Die Datei $AUFPFAD/temp.mp4 ist nicht vorhanden!"
fi
DATEISTRING="temp.mp4";
fi
else
while [ $ERLEDIGT == "nein" ]
do
if [ -d "$AUFPFAD/temp$DATEINUMMER.mp4" ]; then
if [ $TESTING -eq 1 ]; then
echo "Die Datei $AUFPFAD/temp$DATEINUMMER.mp4 gibt's schon, also eines weiter und erneut prüfen"
fi
DATEINUMMER=$DATEINUMMER+1;
else
if [ $TESTING -eq 1 ]; then
echo "Die Datei $AUFPFAD/temp$DATEINUMMER.mp4 gibt's nicht, erstelle sie damit wir testen ob's dann weiter geht"
fi
DATEISTRING="temp$DATEINUMMER.mp4";
ERLEDIGT="ja";
fi
done
fi
if [ $TESTING -eq 1 ]; then
echo $DATEISTRING;
else
return $DATEISTRING;
fi
为了测试脚本,我创建了文件夹" test" ,并使用touch
创建了文件" temp.mp4" 在该文件夹中:
root@Ubuntu-1604-xenial-64-minimal /test # ls
temp.mp4
root@Ubuntu-1604-xenial-64-minimal /test #
但是当我运行脚本时,我得到了这个结果:
root@Ubuntu-1604-xenial-64-minimal /test # /root/Dropbox/Skripte/skripte_CX30/filecheck.sh /test
Die Datei /test/temp.mp4 ist nicht vorhanden!
temp.mp4
root@Ubuntu-1604-xenial-64-minimal /test #
这没有意义,因为文件在那里并且名称正确,这应该有效。
if [ -d "$AUFPFAD/temp.mp4" ]; then
进入 TRUE ,但显然 FALSE ,而且我不明白为什么。
我测试的内容:
将不带"
的表达式放在:
if [ -d $AUFPFAD/temp.mp4 ]; then
同样的结果。
我很确定我忽视了一些事情。
答案 0 :(得分:2)
使用 -e 检查文件是否存在:
if [ -e "$AUFPFAD/temp.mp4" ]; then
-d 用于目录。
如果文件存在,以下运算符返回true:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
-g FILE
FILE exists and is set-group-ID
-G FILE
FILE exists and is owned by the effective group ID
-h FILE
FILE exists and is a symbolic link (same as -L)
-k FILE
FILE exists and has its sticky bit set
-L FILE
FILE exists and is a symbolic link (same as -h)
-O FILE
FILE exists and is owned by the effective user ID
-p FILE
FILE exists and is a named pipe
-r FILE
FILE exists and read permission is granted
-s FILE
FILE exists and has a size greater than zero
-S FILE
FILE exists and is a socket
-t FD file descriptor FD is opened on a terminal
-u FILE
FILE exists and its set-user-ID bit is set
-w FILE
FILE exists and write permission is granted
-x FILE
FILE exists and execute (or search) permission is granted