Установить дату изменения файла на самую старую в каталоге - PullRequest
0 голосов
/ 17 апреля 2020

Простой вопрос:

Я знаю команду touch file_example, чтобы установить для файла file_example последний измененный файл (который появляется внизу, когда я делаю ls -lrt).

Теперь я хотел бы выполнить короткую команду, чтобы установить для файла file_example самый старый файл в данном каталоге, т.е. который появляется в первой строке, когда я делаю ls -lrt.

Is Можно ли сделать это с помощью быстрой команды?

Любые предложения приветствуются.

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете l oop для всех файлов, и всякий раз, когда вы найдете файл, который старше file_example, вы можете обновить file_example:

for f in ./*; do
    # Skip directories
    [[ -d $f ]] && continue

    # Compare and update
    [[ $f -ot file_example ]] && touch file_example -r "$f"
done

Если вы хотите включить скрытые файлы, вы может либо l oop с for f in ./* ./.*, либо сначала использовать shopt -s dotglob.

Это может быть упаковано в функцию оболочки:

settooldest() {
    local file=$1
    local dir=$2
    local f
    for f in "$dir"/*; do
        [[ -d $f ]] && continue
        [[ $f -ot $file ]] && touch "$file" -r "$f"
    done
}

, которая называется как

settooldest file_example path/to/dir
...