Если не использовать 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