How to copy the top 10 most recent files from one directory to another?

前端 未结 4 560
盖世英雄少女心
盖世英雄少女心 2021-02-14 10:04

Al my html files reside here :

/home/thinkcode/myfiles/html/

I want to move the newest 10 files to /home/thinkcode/Test

I

4条回答
  •  囚心锁ツ
    2021-02-14 10:55

    Here is a version which doesn't use ls. It should be less vulnerable to strange characters in file names:

    find . -maxdepth 1 -type f -name '*.html' -print0 
         \| xargs -0 stat --printf "%Y\t%n\n" 
         \| sort -n 
         \| tail  -n 10 
         \| cut -f 2 
         \| xargs cp -t ../Test/
    

    I used find for a couple of reasons:

    1) if there are too many files in a directory, bash will balk at the wildcard expansion*.

    2) Using the -print0 argument to find gets around the problem of bash expanding whitespace in a filename in to multiple tokens.

    * Actually, bash shares a memory buffer for its wildcard expansion and its environment variables, so it's not strictly a function of the number of file names, but rather the total length of the file names and environment variables. Too many environment variables => no wildcard expansion.

    EDIT: Incorporated some of @glennjackman's improvements. Kept the initial use of find to avoid the use of the wildcard expansion which might fail in a large directory.

提交回复
热议问题