Bash脚本将文件夹日期设置为file-date-within文件夹

时间:2014-12-10 09:30:27

标签: bash

我看到我有一些减分,...所以我会尝试更好地解决这个问题:

我有一个linux服务器。 (centos 6.5)

This stores all images in /mnt/usb1/images/

This folder also have several subfolders.
drwxrwxr-x     2  1033 users     4096 Jan 25  2009   /mnt/usb1/images/2014_sept_NewYork 
drwxrwxr-x     2  1033 users     4096 Jan 25  2009   /mnt/usb1/images/2014_sept_Chicago
..

Would be nice to set the folder date - to same date as image inside folder.
-rwxrw-r--    1 1033 users 1753062 Mar  4  2007 IMG_0301.jpg
-rwxrw-r--    1 1033 users 1752525 Mar  4  2007 IMG_0302.jpg

Result: 
drwxrwxr-x     2  1033 users     4096 Mar 4  2007   /mnt/usb1/images/2014_sept_NewYork 
drwxrwxr-x     2  1033 users     4096 Mar 4  2007   /mnt/usb1/images/2014_sept_Chicago

我的脚本有效,但在一些帮助/评论和改进方面会很好:

#!/bin/bash

echo "" # Space at start
echo "###############################################"
echo "#                                             #"
echo "# Setting folders to file modifications date  #"
echo "#                                             #"
echo "###############################################"

echo "--- `date` ---" >> SetFileDate.txt

while read file
do
  touch -t $(date -r "$file" +%Y%m%d%H%M) "$(dirname "$file")"

# echo date - folder/filename
  echo "`date -r \"$file\"+%Y%m%d%H%M` - \"$dirname $file\"" >> SetFileDate.txt

done < <(find . \( -iname \*.JPG -o -iname \*.jpg -o -iname \*.TIF -o -iname \*.avi -o -iname \*.mkv \))

echo "" >> SetFileDate.txt

为什么我要这个? 因为在早些时候,我复制了一个移动的文件,忘了保留权限..这搞砸了文件夹修改时间。


..我的另一个想法已经完成(感谢那些在stackoverflow上贡献的人),它是关于将文件名设置为本地和子文件夹中的所有文件。 在这里查看脚本:Bash script to read EXIF, rename JPG files and check output if file exit -> create newfile-01.jpg

1 个答案:

答案 0 :(得分:0)

您可以进入te文件夹,然后执行:

touch . -t $(printf "%.2i %.2i %.2i %.2i %.2i.%.2i" \
           $(echo $(ls -1t --full-time | sed -n "2p" | \
             sed -e 's/\(\s\|:\|-\|\.\)\+/\n/g' | \
             sed -n "9,14p"))| sed "s/\s\+//g")

这应该是文件夹中文件的最后一次,并根据它设置文件夹的时间。