Reputation: 141180
How can I find things created "Jul 30 04:37" and move them to /tmp? Something wrong:
find . -ctime "0037043007" -exec mv {} /tmp +
Upvotes: 3
Views: 6021
Reputation: 753870
See the GNU find manual (and the time input formats information too).
In particular, the -newerct '30-Jul-2009 04:37'
option seems to do most of what you want.
The only snag is that the man page implies that it works for files strictly newer than the given time. That suggests you need to use the absolute time:
1248957000 = 2009-07-30 05:30:00 (TZ = US/Pacific = UTC-07:00)
-newerct @1248957000
This still leaves the problem of how to deal with the strictly greater than semantics.
-newerct @1248956999 -a ! -newerct @1248957001
This works, but is indisputably messy (and assumes you have tools to obtain the Unix timestamp from a date/time value).
You need a new enough version of find
for this to work (GNU findutils 4.4.2 was current in July 2009; 4.9.0 is current in November 2023).
Note that classic and POSIX mv
expects the target directory to be the last argument. The GNU mv(1)
command has the extraordinarily useful -t directory
option that allows you to use:
find … -exec mv -t /tmp {} +
If there were several files to move, the mv {} /tmp +
in the question would not work, as noted by Arkady in their answer.
Also note that historical Unix systems and current Linux systems do not record the "birth time" of a file — but macOS does and has done for a decade or so. The recorded times are access time ("atime"), data modification time ("mtime") and inode modification time ("ctime"). That's what you've got — "mtime" is usually the best choice, but YMMV.
Upvotes: 5
Reputation: 15059
I am not sure why you are using the "exec {} +
" syntax... How about this:
find . -ctime "0037043007" -exec mv \{} /tmp/ \;
Upvotes: 1
Reputation: 46965
for file in $(ls -lR | grep "Jul 14" | awk '{print $9}')
do
mv $file /tmp
done
Upvotes: 2