0

It has been awhile since I have had to drive into shell scripting. However, I have a shell script where I'm renaming files based on the file extension from a ftp upload.

Currently, the files are uploaded to the server via an FTP process. All files are renamed from filename.txt to filename.dat. What I would like to do is only rename the files based on the file's modified date after a certain number of minutes.

i.e. all files whose modified time is greater than five (5) minutes.
-mtime -5.

Below is my shell script:

#!/bin/bash
for name in /u/easy/ep2/data/download/*.txt; do
    newname=${name%.txt}.log
    mv "$name" "$newname"
done
0

You need +5 for more than 5 minutes.

find /u/easy/ep2/data/download -maxdepth 1 -name '*.txt' -mtime +5 \
    -exec sh -c 'mv "$1" "${1%.txt}.log"' arg0ignored {} \;

Edit

Example:

$ find /tmp -maxdepth 1 -name '*.txt' -mtime +5 -exec sh -c 'echo mv "$1" "${1%.txt}.log"' x0 '{}' \;
mv /tmp/1.txt /tmp/1.log
mv /tmp/2.txt /tmp/2.log
  • Sorry, I should have included the Linux version. We are running RedHat Enterprise v 7.4. – Stan Brown Aug 9 '18 at 19:00
  • This is the error message I get when I run the script from the command line or inside the script. find: paths must precede expression: -exec – Stan Brown Aug 9 '18 at 19:08
  • I have GNU find 4.6.0, for me this works. I forgot the arg0, that is ignored, but that shouldn't lead to this message. – RalfFriedl Aug 9 '18 at 19:17
  • I will give that a try! Thank you for your help! – Stan Brown Aug 9 '18 at 19:18
  • Still returns the same error message when I added the arg0ignored. – Stan Brown Aug 9 '18 at 19:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.