Yam*_*iko 34 unix linux bash ls cp
我正在学习unix/linux类,我们还没有学习变量或函数.我们刚刚学习了一些基本的实用程序,如标志和管道,输出和附加到文件.在实验室作业中,他希望我们找到最大的文件并将它们复制到目录中.
我可以获得5个最大的文件,但我不知道如何在一个命令中将它们传递给cp
ls -SF | grep -v / | head -5 | cp ? Directory
Run Code Online (Sandbox Code Playgroud)
Die*_*lla 60
这将是:
cp `ls -SF | grep -v / | head -5` Directory
Run Code Online (Sandbox Code Playgroud)
假设管道是正确的.反引号在行中替换其中命令的输出.
您也可以进行测试:
cp `echo a b c` Directory
Run Code Online (Sandbox Code Playgroud)
将全部复制a,b和c成Directory.
gpo*_*ojd 36
我会做:
cp $(ls -SF | grep -v / | head -5) Directory
Run Code Online (Sandbox Code Playgroud)
虽然xargs可能是最好的答案.
ls -SF | grep -v / | head -5 | xargs -I{} cp "{}" Directory
Run Code Online (Sandbox Code Playgroud)
使用像这样的反引号或美元符号$(像这样)来执行命令替换.基本上,这会将反向命令的每行标准输出粘贴到周围的命令中并运行它.在"命令替换"下的bash联机帮助页中了解更多信息.
此外,如果您想一次读取一行,则可以使用"while read"语法从管道流中读取单独的行:
ls | while read varname; do echo $varname; done
Run Code Online (Sandbox Code Playgroud)