Linux如何在将文件导入tar之前将文件放在双引号内?

问题描述:

我用ls来获得我的文件名具有白色的空间,所以它看起来是这样的:以管Linux如何在将文件导入tar之前将文件放在双引号内?

my file with whitespace.tar.bz2

我想这焦油类似:

ls | grep mysearchstring | tar xvjf 

我如何可以插入双引用之前管道它焦油?

+0

我不认为你的问题是问正确的问题。您的“类似”示例不会实际打开目录中的任何文件。 – 2008-12-17 00:35:54

一个很好的工具是find和xargs。例如,你可以使用:

find . -name '*.tar.bz2' -print0 | xargs -0 -n1 tar xjf 

由于pixelbeat建议你也可以使用这样的外壳:

for archive in *.tar.bz2; do tar xvjf "$archive"; done 
+1

找到| xargs是最普通和最高效的。 对于纯外壳,以下内容将处理空格: 用于归档* .tar.bz2;做 tar xvjf“$ archive” done – pixelbeat 2008-12-17 00:44:23

这有什么错壳通配符扩展? (假设只有一个文件名。)

% tar -cvf *mysearchstring* 
% tar -xvf *mysearchstring* 

当然,匹配* mysearchstring *的文件名将会有空格。但shell [tcsh,bash]会将该文件名(包括其空格)分配给tar的单个参数。

您可以使用简单的C或C++程序进行验证。例如: -

#include <iostream> 
using namespace std; 
int main(int argc, char **argv) 
{ 
    cout << "argc = " << argc << endl; 
    for (int i = 0; i < argc; i ++) 
    cout << "argv[" << i << "] = \"" << argv[i] << "\"" << endl; 
    return 0; 
} 

试试:./a.out *富*

这就是为什么CSH有:Q [报价词表]选项...

例如[tcsh的]

foreach FILE (*mysearchstring*) 
    tar -xvf $FILE:q 
end 

或者焦油-xvf “$ FILE” 的代替焦油-xvf $ FILE:Q,如果你喜欢。


如果你真的必须使用LS ...

使用LS通过任何管道,每行会输出一个文件名。我们可以使用tr将换行符翻译为任何其他字符,例如null。 xargs可以接收以空字符结尾的字符串。这规避了空间问题。使用-n1将克服多个文件问题。

例如:\ ls | grep mysearchstring | tr'\ 012''\ 0'| xargs的--null -N1焦油-xvf

但我不相信焦油从标准像OP有它容纳多个tarfiles ...