在bash脚本中执行包含引号的命令

时间:2018-05-20 20:37:57

标签: shell scripting

我正在尝试执行一个shell脚本,我在其中调用ExifTool来编辑某些文件的创建日期,但是在ExifTool中,标签的语法值必须用单引号括起来,我尝试了几种方法来逃避这些引号但是创建日期赢了不要改变这是我的剧本

#!/bin/bash
#the argument is a directory name
cd $1
#I go in the directory
STRING="'$1 13:00:00 +00:00:00'"
#I create a variable to handle the quote issue
ls -1 |xargs -t -I _ xargs exiftool -filemodifydate=$STRING _
#I edit the creation date of the files contained in the directory with xargs and exiftool
ls -1|xargs -t -I _ mv _ ~/desktop/pictures/
#I move the files in another directory
cd ..
rm -r $1
#I remove the previous directory

1 个答案:

答案 0 :(得分:1)

当您使用时,您需要引用变量,而不是定义时:

cd "$1"
STRING="$1 13:00:00 +00:00:00"
# .....^   no single quotes  ^
ls -1 | xargs -t -I _ xargs exiftool -filemodifydate="$STRING" _
# ...................................................^.......^
# also, why 2 xargs ? ^^^^^
ls -1 | xargs -t -I _ mv _ ~/desktop/pictures/
cd ..
rm -r "$1"

但是,也不要解析ls的输出,并且使用ALL_CAPS_VARNAMES通常是一个坏主意:

cd "$1"
datestring="$1 13:00:00 +00:00:00"
for file in *; do
    exiftool -filemodifydate="$datestring" _"$file"
    mv "$file" ~/desktop/pictures/
done
cd ..
rm -r "$1"