Automator动作shell脚本来tar多个文件/文件夹(包含空格)

时间:2016-02-01 19:35:46

标签: bash shell tar automator

我正在尝试创建一个shell脚本(用于Automator操作),该脚本创建多个文件的.tar存档,其中一些包含空格作为路径或文件名的一部分。我已经阅读了很多有关焦油创建的问题,但无法拼凑出一个可行的版本。

我的理解是,它应该是这样的:

tar -cf ~/Desktop/archive.tar "/path/somefile.txt" "/path2/some folder" "/path3/some other folder"

我有两张看起来很有希望的草稿。我猜,要么可以工作。

从OS X Finder中,文件作为参数或stdin传递给shell脚本。

尝试1 /bin/bash,传递输入as arguments

files=''
path=''

for f in "$@"
do
    path=`dirname "$f"`
    file=`basename "$f"`

    files=$(printf '%s -C "%s" "%s"' "$files" "$path" "$file")
done

tar -cf ~/Desktop/archive.tar "$files"

在这里,我尝试将文件名连接起来,并将tar标志传递给-C,该标志应该更改为提供的目录。可能过于复杂。

尝试2 /bin/bash,传递输入to stdin

tar -cf ~/Desktop/archive.tar -T -

有效,但有一个明显的缺点:完整路径会保存到存档(包括我的主目录名称)。有没有办法让它只保存basename并丢弃路径(这是我尝试使用的尝试1)?

我愿意接受任何一种解决方案,如果有人能帮我解决问题的话。

1 个答案:

答案 0 :(得分:2)

files变量中嵌入引号并不符合预期(请参阅BashFAQ #50)。您需要使用数组:

files=()
...
    files+=(-C "$path" "$file")
...
tar -cf ~/Desktop/archive.tar "${files[@]}"

这将执行类似:

的操作
tar -cf ~/Desktop/archive.tar -C "path1" "file1" -C "path2" "file2" ...