`stat `формат вывода :обрезать поле времени

awk 'NR > 1 { print $1, $2 }' list.csv |
while read -r prefix group; do
    find. -type f -name "$prefix*" -exec sh -c '
        group="$1"; shift
        mkdir -p "$group"
        for name do echo mv "$name" "$group"; done' sh "$group" {} +
done

Это будет использовать awkдля подачи цикла while с префиксами и именами групп (, пропуская заголовок файла списка ). Это предполагает, что все префиксы и имена групп не содержат пробелов или табуляций.

Цикл while вызывает findдля поиска всех обычных файлов в текущем каталоге или ниже него, имена которых начинаются с заданного префикса. Для всех таких файлов вызывается следующий короткий сценарий оболочки:

group="$1"
shift

mkdir -p "$group"
for name do
    echo mv "$name" "$group"
done

Этот сценарий ожидает, что имя группы будет первым аргументом в командной строке, а остальные аргументы будут путями к файлам, которые нужно переместить в этот групповой каталог.

Сценарий создает групповой каталог в текущем рабочем каталоге, если он еще не существует, а затем перебирает заданные пути, перемещая каждый файл на место. Не выполняется проверка на перезапись файлов.

echoзащищает mvот запуска. Запустите код с echo, чтобы убедиться, что он работает, а затем удалите echo.

0
19.06.2021, 11:28
3 ответа

Вы можете отформатировать строку так, чтобы отображались только дата и время, а затем использовать cut, чтобы избавиться от первого столбца:

stat -c '%.19y %i %A %n' * | cut -d' ' -f2-

Редактировать :Добавление описания параметров резки по запросу.

-d' '   ; use space character as field delimiter
-f2-    ; print field number 2 and continue to end of line 
          (aka delete first field/column in this case)
1
28.07.2021, 11:23

Я использовал awk, чтобы получить желаемое

 stat -c '%y %i %A %n' k |awk '{gsub(/^[0-9]*-[0-9]*-[0-9]* /,"",$0);$2="";gsub(/\..*/,"",$1);print }'

Проверено, работает нормально

0
28.07.2021, 11:23

Вы всегда можете использовать zshвстроенную функцию statвместо (, которая предшествует GNU stat; будьте осторожны, разные системы имеют разные и несовместимые реализации stat, это не стандартная команда):

#! /bin/zsh -
zmodload zsh/stat
for f (*(N)) {
  stat -F%T -LH s -- $f &&
    print -r $s[mtime] $s[inode] $s[mode] $f
}
2
28.07.2021, 11:23

Теги

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