Bash脚本可以找到最近修改过的文件

时间:2009-11-03 16:04:01

标签: bash scripting copy

我有两个文件夹,为了参数清楚/ Volumes / A和/ Volumes / B.它们是从包含来自Backup Exec的.bkf文件的Windows服务器安装的网络共享。

我正在寻找一个脚本,它将查看这两个文件夹并找到最近修改过的.bkf文件并将其复制到另一个位置。文件夹中还有其他文件必须被忽略。

提前致谢!!

肖恩

编辑:

我一起敲了这个:

cp ls -alt /Volumes/E /Volumes/F| grep bkf | head -n 1 | awk '{print $8}' /Volumes/$xservedisk/Windows/ 

任何人都可以想到我不应该使用它的任何原因吗?

再次感谢 肖恩

5 个答案:

答案 0 :(得分:5)

我更喜欢这个来查找最近修改过的文件:

find . -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort

答案 1 :(得分:3)

NEWEST=
for f in /Volumes/A/*.bkf /Volumes/B/*.bkf
do
    if [ -z "$NEWEST" ]
    then 
        NEWEST=$f
    elif [ "$f" -nt "$NEWEST" ] 
    then
        NEWEST=$f
    fi
done

答案 2 :(得分:2)

使用以下内容查找文件:find /Volumes/[AB] -name '*.bkf'

按修改时间对文件进行排序:ls -t

如果加载文件不是那么多,您只需使用:

ls -lrt `find /Volumes/[AB] -name '*.bkf'`

最后显示的文件是最近修改的文件。

修改

更强大的解决方案(感谢ephemient)是:

find /Volumes/[AB] -type f -name '*.bkf' -print0 | xargs -0 ls -lrt

答案 3 :(得分:2)

经过一些曲折只是为了确保处理奇数字符的文件名,mouviciel不会:

NEWEST=$(find /Volumes/A /Volumes/B -name '*.bkf' -printf '%T@ %p\0' | \
    sort -rnz | xargs -0n1 2>/dev/null | head -n1 | cut -d' ' -f2-)
[[ -n "$NEWEST" ]] && cp -v "$NEWEST" /other-location

实际上,由于这些文件来自Windows,因此几乎可以保证其名称中没有奇数字符(如嵌入式换行符),

NEWEST=$(find /Volumes/A /Volumes/B -name '*.bkf' -printf '%T@ %p\n' | \
    sort -rn | head -n1 | cut -d' ' -f2-)
[[ -n "$NEWEST" ]] && cp -v "$NEWEST" /other-location

答案 4 :(得分:1)

cp `find /Volumes/[AB] -name '*bkf' -type f -printf "%A@\t%p\n" |sort -nr |head -1 |cut -f2` dst_directory/