如何触摸排序的 ls 返回的所有文件?

How to touch all files that are returned by a sorted ls?

如果我有以下情况:

ls|sort -n 

我如何按照排序文件的顺序触摸所有这些文件?类似于:

ls|sort -n|touch

正确的语法是什么?请注意,我需要按照文件的排序顺序对文件进行排序——因为我正在尝试将这些文件排序为 FAT reader,同时读取最少的元数据。

你可以使用这个命令

(ls|sort -n >> list.txt )    
touch $(cat list.txt)

touch $(ls /path/to/dir | sort -n)

或者如果您想复制文件而不是创建空文件,请使用此命令

cp list.txt ./DirectoryWhereYouWantToCopy

能给几个文件名吗?
如果您的文件名的编号为 1file、10file、11file .. 20file,那么您需要使用 --general-numeric-sort

ls | sort --general-numeric-sort --output=../workingDirectory/sortedFiles.txt
cat sortedFiles.txt
1file
10file
11file
12file
20file

并移动 sortedFile.txt 到您的工作目录或任何您想要的地方。

touch $(cat ../workingDirectory/sortedFiles.txt)

这将创建具有完全相同名称的空文件

这样试试

touch $(ls | sort -n)
ls -1tr | while read file; do touch "$file"; sleep 1; done

如果您想保留从一个文件到下一个文件的修改时间距离,请改为调用此方法:

upmodstamps() {
    oldest_elapsed=$(( $(date +%s) - $(stat -c %Y "`ls -1tr|head -1`") ))
    for file in *; do
        oldstamp=$(stat -c %Y "$file")
        newstamp=$(( $oldstamp + $oldest_elapsed ))
        newstamp_fmt=$(date --date=@${newstamp} +'%Y%m%d%H%M.%S')
        touch -t ${newstamp_fmt} "$file"
    done
}

注意:date 用法假定 GNU