我想创建一个 tarball,其中包含ctime小于 30 天的目录中的文件。我发现的大多数教程基本上都推荐做这样的事情:
tar cvf foo.tar $(find ~/POD -type f -ctime -30)
Run Code Online (Sandbox Code Playgroud)
问题是我想压缩的很多文件的名称中都包含空格。这意味着该tar命令将基于空格分隔,这意味着完整的文件路径将被分解。
所以现在我试图让find命令返回一个带引号的文件路径列表。所以这是我尝试过的:
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
Run Code Online (Sandbox Code Playgroud)
但是这个命令也把所有基于空格的文件名分解了。然后我尝试了这个:
oldifs=$IFS
IFS=\n
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
IFS=$oldifs
Run Code Online (Sandbox Code Playgroud)
但这给了我相同的结果。
有没有办法可以将完整路径名传递给tar并让所有内容都使用名称中的空格?
我正在使用 Puppet 使用 pip 安装一些 Python 包。我使用的是 Puppet 2.7,所以我的包声明看起来像这样:
package { "carbon":
require => Class["graphite::prereqs::install"],
ensure => latest,
provider => pip,
}
Run Code Online (Sandbox Code Playgroud)
问题是这个包和graphite-web包似乎都有一个错误,可以使用 pip 多次安装相同的版本。所以如果我sudo pip install carbon多次输入,pip 每次都会安装它。我相信这是软件包的错误。
这个错误似乎也让 Puppet 感到困惑,因为每次我配置我的系统carbon并graphite-web重新安装时。
因此,我想知道是否有办法解决这个明显的打包错误。我尝试了以下方法:
package { "carbon":
require => Class["graphite::prereqs::install"],
ensure => latest,
provider => pip,
creates => "/opt/graphite/bin/carbon-cache.py",
}
Run Code Online (Sandbox Code Playgroud)
...但我不能使用创建。有没有另一种方法可以告诉包声明在安装包之前查找文件?