Добавьте человекочитаемую метку времени последнего редактирования к имени файла

Необходимо добавить пользователя к wheel группа:

 gpasswd -a youruser wheel

С другой стороны, можно отключить проверку состава группы на su в pam путем редактирования

 /etc/pam.d/su

и комментирование этой строки:

auth       required     pam_wheel.so use_uid

Это требует, чтобы пользователи были в wheel группа, чтобы смочь переключить пользователя. Пользователь, переключающийся как некорневые работы снова, когда это pam модуль отключен для su.

5
06.11.2015, 08:25
3 ответа

Есть быстрые и простые способы сделать это с bash в качестве оболочки, но они не очень безопасны. (за последние несколько лет в директиве authorized_keys «command» и переменных среды Bash обнаружено несколько недостатков безопасности. Должно быть безопасным теперь, если нет другая потаенная ошибка...)

, Если вы хотите сделать это безопасно, но все еще хотеть написать сценарий в ударе, чтобы показать продукцию, я предложил бы писать маленькую программу C, чтобы действовать как раковина, которая управляет и показывает продукцию из вашего сценария удара. Программа C должна игнорировать свои аргументы и сбросить среду на безопасное значение по умолчанию, а затем форк/exec () сценарий bash со значением STDIN/dev/null. Таким образом, пользователь не имеет абсолютно никакого пути взаимодействовать со сценарием. Я могу привести пример, если нужно.

-121--115255-

Думаю, это может сработать:

for i in *; do 
   fileTime=$(stat -c %Y "$i");  #Get last modification (since EPOCH)
   formatDate=$(date +%Y%m%dT%H%m -d @"$fileTime"); #Get time in format YYYYMMDDTHHmm
   mv "${i%%.*}"_"$formatDate"."${i#*.}"; #Appends "formatDate" before extension
done

С уважением.

-121--70030-

В сценарии можно попробовать следующее:

EXT=${FILE#*.}
NAME=${FILE%%.*}

mv "$FILE" "$NAME$(date --reference "$FILE" '+%Y%m%dT%H%M').$EXT"

, если date поддерживает -привязку , указывающую дату последнего изменения ссылочного файла.

4
27.01.2020, 20:35

Думаю, это может сработать:

for i in *; do 
   fileTime=$(stat -c %Y "$i");  #Get last modification (since EPOCH)
   formatDate=$(date +%Y%m%dT%H%m -d @"$fileTime"); #Get time in format YYYYMMDDTHHmm
   mv "${i%%.*}"_"$formatDate"."${i#*.}"; #Appends "formatDate" before extension
done

С уважением.

4
27.01.2020, 20:35

Это все можно сделать как oneliner.

for i in *.* ; do mv "$i" "${i%.*}_$(date --reference "$i" +%Y%m%dT%H%M).${i##*.}"; done

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

for i in *.* ; do mv "$i" "${i%.*}_$(date --reference "$i" +%s).${i##*.}"; done

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

Спасибо muru за --reference; я не знал об этой опции.

1
27.01.2020, 20:35

Теги

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