Если не использовать 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
Предоставление доступа к каталогу /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
, чтобы узнать больше о параметрах этих утилит.