Сценарий прав доступа к файлам

Если не использовать rename, вот как вы можете поступить сShell (Bash, ksh, ksh93, mksh, zsh) Pattern substitution expansion.

find * -path "archive" -prune -o -type f -exec \
    bash -c 'echo "$1" "archive/${1/\//_}"' find_bash '{}' \;
  • -path "archive" -pruneисключает сам каталог archive.

  • ${1/\//_}заменяет косую черту /на подчеркивание _. 1указывает на первый параметр find_bash, который представляет собой путь к файлу, проходящий через {}.

(Замените echoна cpдля копирования или mvдля перемещения файлов)

Структура каталогов:

.
├── 2017-09-22
│   └── cyber.gz
├── 2017-09-23
│   └── cyber.gz
├── 2017-09-24
│   └── cyber.tar
└── archive

После выполнения команды:

.
├── 2017-09-22
│   └── cyber.gz
├── 2017-09-23
│   └── cyber.gz
├── 2017-09-24
│   └── cyber.tar
└── archive
    ├── 2017-09-22_cyber.gz
    ├── 2017-09-23_cyber.gz
    └── 2017-09-24_cyber.tar

-4
10.11.2019, 07:20
1 ответ

Предоставление доступа к каталогу /var/log/для записи может представлять угрозу безопасности. Вы не должны практиковать свои навыки кодирования с любым системным каталогом.

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

  • Если вы хотите изменить разрешение рекурсивно:
sudo find /var/log/ -type d -exec chmod 777 '{}' \;
sudo find /var/log/ -type f -exec chmod 666 '{}' \;
  • Если вы хотите изменить разрешение не -рекурсивно:
# This does show hidden files
sudo find /var/log/ -maxdepth 1 -type d -exec chmod 777 '{}' \;
sudo find /var/log/ -maxdepth 1 -type f -exec chmod 666 '{}' \;

или

# This does NOT show hidden files
sudo find /var/log/* -maxdepth 0 -type d -exec chmod 777 '{}' \;
sudo find /var/log/* -maxdepth 0 -type f -exec chmod 666 '{}' \;

Вы можете использовать man, чтобы узнать больше о параметрах этих утилит.

1
28.01.2020, 05:20

Теги

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