假设我想将文件列表复制到另一个目录
-rw-rw---- Sep 1 11:06 File1.txt
-rw-rw---- Sep 1 11:06 File101.txt
-rw-rw---- Sep 3 11:06 File2.txt
-rw-rw---- Sep 4 11:06 File303.txt
我想grep所有那里有9月1日的文件
ls -lrt | grep 'Sep 1'
并尝试将其作为参数传递给cp
cp `ls -lrt | grep 'Sep 1'` /directory/
or
cp $(ls -lrt | grep 'Sep 1') /directory/
第二个选项i是非法变量名 你可以帮我解决这个问题吗?
答案 0 :(得分:4)
不要解析ls
的输出:Why you shouldn't parse the output of ls。
相反,您可以执行以下操作:
cp *1* /directory/
此*1*
将匹配包含1
的所有内容,并将应用于cp
命令,以便将其展开为:
cp File1.txt File2.txt File303.txt File101.txt /directory/
第一个解决方案是执行以下操作:在grep
ping修改时间为Sep 1
的文件后打印文件名。根据该输出,复制:
cp $(ls -1 | awk '/Sep 1/{print $NF}') /directory/
但这非常脆弱,因为带有空格的文件名不会被复制,而且解析ls的一般事实也是一个坏主意。
相反,如果要移动过去24小时内修改过的文件,可以执行以下操作:
find . -maxdepth 1 -type f -mtime -1 -exec cp {} /directory/ \;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
performs the search copies the matches to the dir
或添加-daystart
以匹配"今天创建",而不是过去24小时:find . -maxdepth 1 -type f -daystart -mtime -1 ...