Linux如何在将文件导入tar之前将文件放在双引号内?
我用ls来获得我的文件名具有白色的空间,所以它看起来是这样的:以管Linux如何在将文件导入tar之前将文件放在双引号内?
my file with whitespace.tar.bz2
我想这焦油类似:
ls | grep mysearchstring | tar xvjf
我如何可以插入双引用之前管道它焦油?
一个很好的工具是find和xargs。例如,你可以使用:
find . -name '*.tar.bz2' -print0 | xargs -0 -n1 tar xjf
由于pixelbeat建议你也可以使用这样的外壳:
for archive in *.tar.bz2; do tar xvjf "$archive"; done
找到| 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 ...
我不认为你的问题是问正确的问题。您的“类似”示例不会实际打开目录中的任何文件。 – 2008-12-17 00:35:54