Как добавить дату во все файлы в каталоге без касающихся подкаталогов с помощью сценария удара

OS X 10.8 также перечислен как регистрируемый продукт UNIX 03 в http://www.opengroup.org/openbrand/register/.

При использовании удара это не совместимо POSIX по умолчанию. эхо не поддерживает опций по умолчанию в sh все же.

$ bash
$ builtin echo -e a; /bin/echo -e a
a
-e a
$ sh
$ builtin echo -e a; /bin/echo -e a
-e a
-e a
$ shopt -u xpg_echo
$ builtin echo -e a; /bin/echo -e a
a
-e a

sh OS X является версией удара с различиями как:

  • Режим POSIX включен
  • xpg_echo включен (эхо не поддерживает опций и интерпретирует escape-последовательности),
  • sh-l не читает .bash_profile
  • Значения по умолчанию FCEDIT редактору вместо РЕДАКТОРА или редактору

4
30.11.2014, 05:07
3 ответа

Как slm уже указали, что можно протестировать на $f , чтобы быть регулярным файлом. При изучении я изменил бы сценарий, чтобы не быть одним лайнером, они имеют тенденцию быть более твердыми считать и поддержать:

for f in *
do 
  if [ -f "$f" ]
  then
    mv -- "$f" "$f-$(stat -c %Y "$f" | date +%Y%m%d)"
  fi 
done

(можно всегда свернуть это позже путем вставки ; и удаляющий новые строки)

-f тестирует аргумент, чтобы быть регулярным файлом (не устройство или каталог), существуют другие тесты также (-d для каталога, например, таким образом, вы могли протестировать если [!-d "$f"] также в этом случае).

4
27.01.2020, 20:51

Это должно работать на то, чего вы требуете;

для файла в $ (находят. - тип f); сделайте mv - "$file" "$file-$ (статистика-c %Y "$file" | дата + %Y%m%d)"; сделанный

объяснение новой части, вы используете команду находки, чтобы только найти файлы (введите-f);

находят. - тип f .

2
27.01.2020, 20:51

Вам вообще не нужен цикл, просто используйте Найти вместе с EXEC Опция + SH -C :

find . -maxdepth 1 -type f -exec sh -c 'mv -- "$0" "$0"-$(stat -c %Y "$0" | date +%Y%m%d)' {} \;

Однако трубопровод на Дата не имеет большого смысла для меня. Если вы хотите добавить Текущий Дата для всех файлов, то вообще не требуется:

find . -maxdepth 1 -type f -exec sh -c 'mv -- "$0" "$0"-$(date +%Y%m%d)' {} \;

С другой стороны, если вы хотите добавить время последней модификации каждого файла, затем используйте -R -R. Опция Дата :

find . -maxdepth 1 -type f -exec sh -c 'mv -- "$0" "$0"-$(date -r "$0" +%Y%m%d)' {} \;

и если вы хотите, просто для упражнений, используйте вывод из Stat Вход дата , затем используйте - Дата Опция Дата Дата Команда :

find . -maxdepth 1 -type f -exec sh -c 'mv -- "$0" "$0"-$(date +%Y%m%d --date=@$(stat -c %Y "$0"))' {} \;
1
27.01.2020, 20:51

Теги

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