如何找到“Jul 30 04:37”创建的内容并将其移动到/tmp?
find . -ctime "0037043007" -exec mv {} /tmp +
字符串
ewm0tg9j1#
请参阅GNU查找手册(以及时间输入格式信息)。特别是,-newerct '30-Jul-2009 04:37'选项似乎可以完成您想要的大部分工作。唯一的问题是手册页暗示它适用于严格比给定时间新的文件。这意味着你需要使用绝对时间:
-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
mv
mv(1)
-t directory
find … -exec mv -t /tmp {} +
型如果有多个文件要移动,问题中的mv {} /tmp +将无法工作,正如Arkady在其answer中所指出的那样。还要注意的是,历史上的Unix系统和当前的Linux系统都不记录文件的“出生时间”--但macOS会记录,而且已经记录了十年左右。记录的时间是访问时间(“atime”)、数据修改时间(“mtime”)和inode修改时间(“ctime”)。这就是你所得到的--“mtime”通常是最好的选择,但YMMV。
mv {} /tmp +
5rgfhyps2#
for file in $(ls -lR | grep "Jul 14" | awk '{print $9}') do mv $file /tmp done
svdrlsy43#
我不知道你为什么要使用“exec {} +“语法.
exec {} +
find . -ctime "0037043007" -exec mv \{} /tmp/ \;
3条答案
按热度按时间ewm0tg9j1#
请参阅GNU查找手册(以及时间输入格式信息)。
特别是,
-newerct '30-Jul-2009 04:37'
选项似乎可以完成您想要的大部分工作。唯一的问题是手册页暗示它适用于严格比给定时间新的文件。这意味着你需要使用绝对时间:
字符串
这仍然留下了如何处理严格大于语义的问题。
型
这是可行的,但毫无疑问是混乱的(并假设您有工具从日期/时间值获得Unix时间戳)。
您需要一个足够新的
find
版本才能工作(GNU findutils 4.4.2是2009年7月的最新版本; 4.9.0是2023年11月的最新版本)。请注意,classic和POSIX
mv
期望目标目录是最后一个参数。GNUmv(1)
命令具有非常有用的-t directory
选项,允许您使用用途:型
如果有多个文件要移动,问题中的
mv {} /tmp +
将无法工作,正如Arkady在其answer中所指出的那样。还要注意的是,历史上的Unix系统和当前的Linux系统都不记录文件的“出生时间”--但macOS会记录,而且已经记录了十年左右。记录的时间是访问时间(“atime”)、数据修改时间(“mtime”)和inode修改时间(“ctime”)。这就是你所得到的--“mtime”通常是最好的选择,但YMMV。
5rgfhyps2#
字符串
svdrlsy43#
我不知道你为什么要使用“
exec {} +
“语法.字符串