首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AWK输出的Linux CP

使用AWK输出的Linux CP
EN

Stack Overflow用户
提问于 2016-11-14 19:00:10
回答 2查看 3.4K关注 0票数 4

我一直在努力学习更多关于Linux的知识,今天早上我一直专注于awk命令。我一直在努力工作的命令如下。

代码语言:javascript
运行
复制
ls -lRt lpftp.* | awk '{print $7, $9}' | mkdir -p $(awk '{print $1}') | ls -lRt lpftp.* | cp $(awk '{print $9, $7}')

本质上,我试图将目录中的每个文件移动到一个子目录中,这个子目录是基于最后一天修改的文件。该命令首先只打印我想要的文件,然后使用mkdir创建一个文件夹,该文件夹是根据上次修改的那个月的那一天创建的。在此之后,我要做的是将每个文件移动到其关联的目录中,但是,正如命令现在所示,它将每个文件移动到01文件夹中,并打印出以下文本

代码语言:javascript
运行
复制
cp: 0653-436  12 is a directory.
    Specify -r or -R to copy.

每个目录一次。

有人知道我怎么解决这个问题吗?还是有更好的方法去做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-14 19:07:48

ls -lRt lpftp.* | awk '{print $7, $9}' | while read day file ; do mkdir -p "$day"; cp "$file" "$day"; done

dodone之间的命令将针对每一行输出执行,首先在day变量中打印awk,第二个在file中打印(每行)。我在这里使用了一些不必要的引号,因为在给定设置变量的方法时,变量中不会有空格。

票数 4
EN

Stack Overflow用户

发布于 2016-11-15 01:00:04

做这种事情最安全的方法--也是执行最快的方法--是在数据上使用awk输出shell脚本。在awk中,打印您希望执行的mkdircp命令。将结果导入head(1),直到您满意为止。也许可以看一下less(1)中的全部内容。然后按以下方式执行:

代码语言:javascript
运行
复制
ls -lRg lpfpt.* | awk script.awk | sh -ex

这将将命令回显为标准错误,并在第一个错误时停止。如果你完全确定它是对的,那么就放弃x选项。

这种方法相对于awk中的循环或一组子进程(使用system函数)的优点是:

  • 你可以看到将要发生的事情和正在发生的事情
  • 执行速度
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40595908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档