【发布时间】:2016-11-14 19:00:10
【问题描述】:
我一直在努力学习更多关于 Linux 的知识,今天上午一直专注于 awk 命令。我一直试图开始工作的命令如下。
ls -lRt lpftp.* | awk '{print $7, $9}' | mkdir -p $(awk '{print $1}') | ls -lRt lpftp.* | cp $(awk '{print $9, $7}')
基本上,我正在尝试根据上次修改日期的文件将目录中的每个文件移动到子目录中。该命令首先只打印我想要的文件,然后使用 mkdir 根据上次修改的日期创建一个文件夹。之后我想做的是将每个文件移动到其关联的目录中,但是现在命令将每个文件移动到 01 文件夹并打印出以下文本
cp: 0653-436 12 is a directory.
Specify -r or -R to copy.
每个目录一次。
有谁知道我该如何解决这个问题?或者是否有更好的方法?
【问题讨论】:
-
为什么要将
mkdir的输出传送到ls?mkdir不产生任何输出(错误消息除外),ls不使用其输入。 -
第二个 LS 语句的原因是,在 mkdir 之后,我无法从原始 LS 访问文件名,所以我再次运行它以重新创建该列表。有没有更好的方法?
-
@Cronisej 是的,看我的回答。
-
@Cronisej 我明白你为什么有第二个
ls声明。我不明白的是为什么您将某些内容通过管道传输到其中,而不是仅将其作为单独的命令运行。 -
例如
ls ... | awk ... | mkdir; ls ... | awk ... | cp ...