小编Tom*_*url的帖子

使用 Find 返回引用的文件路径列表

我想创建一个 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并让所有内容都使用名称中的空格?

linux unix tar shell-scripting

6
推荐指数
1
解决办法
210
查看次数

如果文件不存在,如何告诉 Puppet 仅使用 Pip 进行安装

我正在使用 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 感到困惑,因为每次我配置我的系统carbongraphite-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)

...但我不能使用创建。有没有另一种方法可以告诉包声明在安装包之前查找文件?

python puppet pip graphite

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

graphite ×1

linux ×1

pip ×1

puppet ×1

python ×1

shell-scripting ×1

tar ×1

unix ×1