Есть ли команда, позволяющая быстро закрыть и снова открыть несколько файлов в разных местах, подобно тому, как работает pushd popd?

exiftool:

exiftool "-CreateDate>FileModifyDate" FILES or FOLDERS

Имя нужного значения может отличаться в зависимости от формата файла и других факторов. Используйте ниже, чтобы распечатать их:

exiftool -time:all -s FILE
2
06.05.2020, 10:30
1 ответ

Что-то подобное может сработать в Bash:

#!/bin/bash

filelist=()

function fadd() {
    filelist+=("${@}")
}

function fdel() {
    local -r index="${1}"
    newstack=()

    for ((i = 0; i < ${#filelist[@]}; ++i)); do
        if [[ "${i}" != "${index}" ]]; then
            newstack+=( "${filelist[${i}]}" )
        fi
    done

    filelist=( "${newstack[@]}" )
}

function flist() {
    for ((i = 0; i < ${#filelist[@]}; ++i)); do
        printf "%2d %s\n" "${i}" "${filelist[${i}]}"
    done
}

function fedit() {
    local -r index="${1:-0}"

    ${EDITOR} "${filelist[${index}]}"
}

function fget() {
    local -r index="${1:-0}"

    echo "${filelist[${index}]}"
}

Это определяет массив filelist, который изначально пуст, и определяет набор функций, которые воздействуют на этот массив:

  • Функция fadd()добавляет имена в конец массива.
  • Функция fdel()удаляет элемент массива с заданным индексом.
  • Функция flist()выводит содержимое массива вместе с его индексом.
  • Функция fedit()открывает ваш редактор (, как определено ${EDITOR}), с файлом, соответствующим данному индексу, в filelist.
  • Функция fget()печатает имя файла для файла с заданным индексом.

Обратите внимание, что это не включает проверку ошибок (, например, вы можете указать недопустимые индексы ). Обратите также внимание, что я не проверял это с пробелами в именах файлов --, которые, вероятно, не будут работать с этим.

Если я получаю файл, содержащий вышеуказанное, я могу сделать следующее:

$ source file_mgmt

# Add some files of interest
$ fadd ~/src/foo.[ch]
$ fadd /tmp/bar.txt
$ fadd ~/.bashrc

# View the file list
$ flist
 0 /home/user/src/foo.c
 1 /home/user/src/foo.h
 2 /tmp/bar.txt
 3 /home/user/.bashrc

# Open a file from the list by index
$ fedit 0
[ my ${EDITOR} opened with /home/user/src/foo.c ]

# Remove a file from the list
$ fdel 2

$ flist
 0 /home/user/src/foo.c
 1 /home/user/src/foo.h
 2 /home/user/.bashrc

# Copy ~/.bashrc to tmp
$ cp $(fget 2) /tmp

Обратите внимание, что список файлов будет на основе -оболочки. Если, например, у вас открыто несколько терминалов, они будут иметь независимые списки файлов.

1
28.04.2021, 23:16

Теги

Похожие вопросы