unix find-command:使用创建时间搜索

2lpgd968  于 4个月前  发布在  Unix
关注(0)|答案(3)|浏览(66)

如何找到“Jul 30 04:37”创建的内容并将其移动到/tmp?

find .  -ctime "0037043007" -exec mv {} /tmp +

字符串

ewm0tg9j

ewm0tg9j1#

请参阅GNU查找手册(以及时间输入格式信息)。
特别是,-newerct '30-Jul-2009 04:37'选项似乎可以完成您想要的大部分工作。
唯一的问题是手册页暗示它适用于严格比给定时间新的文件。这意味着你需要使用绝对时间:

1248957000 = 2009-07-30 05:30:00  (TZ = US/Pacific = UTC-07:00)

-newerct @1248957000

字符串
这仍然留下了如何处理严格大于语义的问题。

-newerct @1248956999 -a ! -newerct @1248957001


这是可行的,但毫无疑问是混乱的(并假设您有工具从日期/时间值获得Unix时间戳)。
您需要一个足够新的find版本才能工作(GNU findutils 4.4.2是2009年7月的最新版本; 4.9.0是2023年11月的最新版本)。
请注意,classic和POSIX mv期望目标目录是最后一个参数。GNU mv(1)命令具有非常有用的-t directory选项,允许您使用用途:

find … -exec mv -t /tmp {} +


如果有多个文件要移动,问题中的mv {} /tmp +将无法工作,正如Arkady在其answer中所指出的那样。
还要注意的是,历史上的Unix系统和当前的Linux系统都不记录文件的“出生时间”--但macOS会记录,而且已经记录了十年左右。记录的时间是访问时间(“atime”)、数据修改时间(“mtime”)和inode修改时间(“ctime”)。这就是你所得到的--“mtime”通常是最好的选择,但YMMV。

5rgfhyps

5rgfhyps2#

for file in $(ls -lR | grep "Jul 14" | awk '{print $9}')
do
mv $file /tmp
done

字符串

svdrlsy4

svdrlsy43#

我不知道你为什么要使用“exec {} +“语法.

find . -ctime "0037043007" -exec mv \{} /tmp/ \;

字符串

相关问题