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

Tom*_*url 6 linux unix tar shell-scripting

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

gee*_*aur 6

GNUtar可以-T选择从指定文件中获取文件列表。我会使用find ... -print0 | tar cfzT outfile.tgz - --nullsotar接收以空字符结尾的文件名stdin