Unix scipt复制除最新时间戳文件之外的所有文件

时间:2016-03-16 15:02:32

标签: bash shell unix sh

是否有任何命令会将除最新时间戳文件之外的所有文件从一个目录复制到另一个目录中。

Dir1 - file1,file2,file3,file4(新时间戳)

cp到Dir2 - file1,file2,file3,我不想要file4,因为这是Dir1中的新文件。

2 个答案:

答案 0 :(得分:0)

您可以使用ls -1tr | tail -1构造来获取最新文件。

然后复制文件,最新文件除外。

如果文件列表通常很短,则可以更改此代码 创建一个文件列表,然后进行复制 - 这样会更有效。

dir2="../somewhereelse"
exception=$(ls -1tr | tail -1)
for fn in *; do
  if [[ $fn == $exception ]]; then
    continue
  fi
  cp "$fn" "$dir2"
done

答案 1 :(得分:0)

#!/bin/bash
dir1=/first/dir
dir2=/second/dir

# first loop through and find oldest file
# http://mywiki.wooledge.org/BashFAQ/003
unset -v newest
for file in "$dir1"/*; do
    [[ -f "$file" ]] && [[ "$file" -nt "$newest" ]] && newest="$file"
done

# then loop through and perform actions on the others
for file in "$dir1"/*; do
    if [[ -f "$file" ]] && [[ ! "$file" == "$newest" ]]; then
        cp -p "$file" "$dir2"
    fi
done