我一直在努力学习更多关于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.
每个目录一次。
有人知道我怎么解决这个问题吗?还是有更好的方法去做呢?
发布于 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
do
和done
之间的命令将针对每一行输出执行,首先在day
变量中打印awk
,第二个在file
中打印(每行)。我在这里使用了一些不必要的引号,因为在给定设置变量的方法时,变量中不会有空格。
发布于 2016-11-15 01:00:04
做这种事情最安全的方法--也是执行最快的方法--是在数据上使用awk输出shell脚本。在awk中,打印您希望执行的mkdir
和cp
命令。将结果导入head(1),直到您满意为止。也许可以看一下less(1)中的全部内容。然后按以下方式执行:
ls -lRg lpfpt.* | awk script.awk | sh -ex
这将将命令回显为标准错误,并在第一个错误时停止。如果你完全确定它是对的,那么就放弃x
选项。
这种方法相对于awk中的循环或一组子进程(使用system
函数)的优点是:
https://stackoverflow.com/questions/40595908
复制相似问题