2016 Jan 18; 07:02 PM
—
Azure, может это дело бросить? Что-то задача перестала мне казаться простой…
Удалось на бегу поговорить с нашим приходящим программистом из всего разговора с ним я понял, что
rename менее подходит для этой задачи чем
sed и ещё у него какие-то сомнения по поводу ключа где присутствует „w“. Про:
-n, --no-act
No Action: show what files would have been renamed.
я, „тупо
“ забыл, а читал ведь.
— Со скриптом на bash дела обстоят лучше. Там по-моему есть шансы выправить ситуацию. Файлы переименовывает, а директории пропускает. Но я посмотрел, что вроде у Вас так задумано. Пробовал закомментировать строку, где у Вас комментарий но желаемого результата не получил.
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181721$ tree
.
└── 2016 Jan 18; 01:10 PM №001 ∗ש dir
├── 2016 Jan 18; 01:11 PM ³ ́§°£ dir
│ ├── 2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.file
│ └── Безымянная папка dir
│ └── 2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.file
└── →¥‰∞£ 2016 Jan 18; 01:16 PM джфов.file
3 directories, 3 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181721$ find -type f -name '*[^.[:alnum:]]*' -exec rename -n 's/[^.\/\w\xa1-\xff](?!.*\/)/_/g;s/[^\/]+$/\U$&/' {} +
./2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir/Безымянная папка dir/2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.file renamed as ./2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir/Безымянная папка dir/2016JAN18131240_2016_JAN_18__01_12_PM__�__�__�_�®.FILE_
./2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir/2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.file renamed as ./2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir/2016_JAN_18__01_14_PM__OAKVILLE__ON__CANADA._м£®�_�__�__°____�________.FILE
./2016 Jan 18; 01:10 PM №001 ∗ש dir/→¥‰∞£ 2016 Jan 18; 01:16 PM джфов.file renamed as ./2016 Jan 18; 01:10 PM №001 ∗ש dir/�__¥�_��__£__2016_JAN_18__01_16_PM_дж�_ов.FILE__
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181721$ find -type f -name '*[^.[:alnum:]]*' -exec rename 's/[^.\/\w\xa1-\xff](?!.*\/)/_/g;s/[^\/]+$/\U$&/' {} +
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181721$ tree
.
└── 2016 Jan 18; 01:10 PM №001 ∗ש dir
├── 2016 Jan 18; 01:11 PM ³ ́§°£ dir
│ ├── 2016_JAN_18__01_14_PM__OAKVILLE__ON__CANADA._м£®\15530462567\7314230000\5200032463\15531667456\7314230000\5200032463\6434066456\7314230000\5200032463\16615066456\7314230000\5200032463\6434066456\6114000166\15231473\15735427052\6114000142\15231473\16434227052\7314230000\5200032463\16635267056\7314230000\5200032463\16633273456\7314230000\5200032463\14634660456\7314230000\5200032463\33271056\6316630460\5612400065Ź\26735662120\26735662120\14333063056\7314230000\5200032463\15135460456\7314230000\5200032463\15133063056\7314230000\5200032463\16633063056\7314230000\5200032463\33063456\6316630460\5612400065\6000066144\6514635461\17013425000\6000063143\6514635461\17013425000\6000062167\6514635461\17113425000\6000073165\6514635461\14313425000\6000066547\6514635461\14513425000\6000063155\6514635461\14113425000\6000073170\6514635461\14113425000\6000074156\6514635461\15713425000\6000073147\6514635461\15713425000\6000074147\6514635461\14113425000\6000061541\6614635460\14113425000\6014000165\15431473\15431427052\6000061541\6614635460\15513425000\6000062151\6614635460\15513425000\32262151\6316630060\5612400066\30265555\6316630060\5612400066\14670155\6316630060\5612400066\30670155\6316630060\5612400066\31663557\6316630060\5612400066\6000060562\6614635460\16713425000\6000073141\6614635460\14113425000\6000060570\6614635460\15713425000\6000060547\6614635460\16313425000\6000074160\6614635460\17013425000\31470163\63166300606Ÿ\020\26700055433\26735663210\1043237050\021\26735600155\26735662120
│ └── Безымянная папка dir
│ └── 2016JAN18131240_2016_JAN_18__01_12_PM__\6000066547\6514635461\14513425000\6000063155\6514635461\14113425000\6000073170\6514635461\14113425000\6000074156\6514635461\15713425000\6000073147\6514635461\15713425000\6000074147\6514635461\14113425000¹\26735662120\26735662120\6014000165\15431473\15431427052\6000061541\6614635460\15513425000\6000062151\6614635460\15513425000\32262151\6316630060\5612400066\30265555\6316630060\5612400066\14670155\6316630060\5612400066\30670155\6316630060\5612400066\31663557\6316630060\5612400066\6000060562\6614635460\16713425000\6000073141\6614635460\14113425000\6000060570\6614635460\15713425000\6000060547\6614635460\16313425000\6000074160\6614635460\17013425000\31470163\63166300606¸\020\26700055433\26735663210\1043237050\021\26735600155\26735662120
└── \26735662120\26735662120
3 directories, 3 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181721$
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181733$ tree
.
└── 2016 Jan 18; 01:10 PM №001 ∗ש d i r
├── 2016 Jan 18; 01:11 PM ³ ́§°£ d i r
│ ├── 2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.gif
│ └── Безымянная папка d i r
│ └── 2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.gif
└── →¥‰∞£ 2016 Jan 18; 01:16 PM джфов.gif
3 directories, 3 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181733$ find -type f -name '*[^.[:alnum:]]*' -exec rename -n 's/[^.\/\w\xa1-\xff](?!.*\/)/_/g;s/[^\/]+$/\U$&/' {} +
./2016 Jan 18; 01:10 PM №001 ∗ש d i r/2016 Jan 18; 01:11 PM ³ ́§°£ d i r/2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.gif renamed as ./2016 Jan 18; 01:10 PM №001 ∗ש d i r/2016 Jan 18; 01:11 PM ³ ́§°£ d i r/2016_JAN_18__01_14_PM__OAKVILLE__ON__CANADA._м£®�_�__�__°____�________.GIF
./2016 Jan 18; 01:10 PM №001 ∗ש d i r/2016 Jan 18; 01:11 PM ³ ́§°£ d i r/Безымянная папка d i r/2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.gif renamed as ./2016 Jan 18; 01:10 PM №001 ∗ש d i r/2016 Jan 18; 01:11 PM ³ ́§°£ d i r/Безымянная папка d i r/2016JAN18131240_2016_JAN_18__01_12_PM__�__�__�_�®.GIF
./2016 Jan 18; 01:10 PM №001 ∗ש d i r/→¥‰∞£ 2016 Jan 18; 01:16 PM джфов.gif renamed as ./2016 Jan 18; 01:10 PM №001 ∗ש d i r/�__¥�_��__£__2016_JAN_18__01_16_PM_дж�_ов.GIF
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181733$ find -type f -name '*[^.[:alnum:]]*' -exec rename 's/[^.\/\w\xa1-\xff](?!.*\/)/_/g;s/[^\/]+$/\U$&/' {} +
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181733$ tree
.
└── 2016 Jan 18; 01:10 PM №001 ∗ש d i r
├── 2016 Jan 18; 01:11 PM ³ ́§°£ d i r
│ ├── 2016_JAN_18__01_14_PM__OAKVILLE__ON__CANADA._м£®\15530462567\7314230000\5200032463\15531667456\7314230000\5200032463\6434066456\7314230000\5200032463\16615066456\7314230000\5200032463\6434066456\6114000166\15231473\15735427052\6114000142\15231473\16434227052\7314230000\5200032463\16635267056\7314230000\5200032463\16633273456\7314230000\5200032463\14634660456\7314230000\5200032463\33271056Ɓ\26735432120\26735432120\7314230000\5200032463\14333063056\7314230000\5200032463\15135460456\7314230000\5200032463\15133063056\7314230000\5200032463\16633063056\7314230000\5200032463\33063456\6316630460\5612400065\6000066144\6514635461\17013425000\6000063143\6514635461\17013425000\6000062167\6514635461\17113425000\6000073165\6514635461\14313425000\6000066547\6514635461\14513425000\6000063155\6514635461\14113425000\6000073170\6514635461\14113425000\6000074156\6514635461\15713425000\6000073147\6514635461\15713425000\6000074147\6514635461\14113425000\6000061541\6614635460\14113425000\6014000165\15431473\15431427052\6000061541\6614635460\15513425000\6000062151\6614635460\15513425000\32262151\6316630060\5612400066\30265555\6316630060\5612400066\14670155\6316630060\5612400066\30670155\6316630060\5612400066\31663557\6316630060\5612400066\6000060562\6614635460\16713425000\6000073141\6614635460\14113425000\6000060570\6614635460\15713425000\6000060547\6614635460\16313425000\6000074160\6614635460\17013425000\31470163\63166300606ƀ\020\26700055433\26735433210\1121007050\021\26735400155\26735432120
│ └── Безымянная папка d i r
│ └── 2016JAN18131240_2016_JAN_18__01_12_PM__\6000066547\6514635461\14513425000\6000063155\6514635461\14113425000\6000073170\6514635461\14113425000\6000074156\6514635461\15713425000\6000073147\6514635461\15713425000\6000074147Á\26735432120\26735432120\6614635460\14113425000\6014000165\15431473\15431427052\6000061541\6614635460\15513425000\6000062151\6614635460\15513425000\32262151\6316630060\5612400066\30265555\6316630060\5612400066\14670155\6316630060\5612400066\30670155\6316630060\5612400066\31663557\6316630060\5612400066\6000060562\6614635460\16713425000\6000073141\6614635460\14113425000\6000060570\6614635460\15713425000\6000060547\6614635460\16313425000\6000074160\6614635460\17013425000\31470163\63166300606À\020\26700055433\26735433210\1121007050\021\26735400155\26735432120
└── \26735432450\26735432450
3 directories, 3 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181733$
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181742$ ls
16Jan18Two.sh 2016 Jan 18; 01:10 PM №001 ∗ש dir
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181742$ cat 16Jan18Two.sh
#!/bin/bash
shopt -s globstar
for dir in **/
do
for file in "$dir"/*
do
[ -d "$file" ] && continue # пропускает папки
path=${file%/*}
name=${file#$path/}
name=${name//[^.[:alnum:]]/_}
mv "$file" "$path/${name^^}"
done
done
shopt -u globstar
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181742$ tree
.
├── 16Jan18Two.sh
└── 2016 Jan 18; 01:10 PM №001 ∗ש dir
├── 2016 Jan 18; 01:11 PM ³ ́§°£ dir
│ ├── 2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.file
│ └── Безымянная папка dir
│ └── 2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.file
└── →¥‰∞£ 2016 Jan 18; 01:16 PM джфов.file
3 directories, 4 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181742$ ./16Jan18Two.sh
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181742$ tree
.
├── 16Jan18Two.sh
└── 2016 Jan 18; 01:10 PM №001 ∗ש dir
├── 2016 Jan 18; 01:11 PM ³ ́§°£ dir
│ ├── 2016_JAN_18__01_14_PM__OAKVILLE__ON__CANADA._М__Р______________.FILE
│ └── Безымянная папка dir
│ └── 2016JAN18131240_2016_JAN_18__01_12_PM______.FILE_
└── _______2016_JAN_18__01_16_PM_ДЖФОВ.FILE__
3 directories, 4 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan181742$
fjf@fjf-Inspiron-530s:~/Рабочий стол/zz1601Jan181806$ tree
.
├── 16Jan18Two.sh
└── 2016 Jan 18; 01:10 PM №001 ∗ש dir
├── 2016 Jan 18; 01:11 PM ³ ́§°£ dir
│ ├── 2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.file
│ └── Безымянная папка dir
│ └── 2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.file
└── →¥‰∞£ 2016 Jan 18; 01:16 PM джфов.file
3 directories, 4 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/zz1601Jan181806$ cat 16Jan18Two.sh
#!/bin/bash
shopt -s globstar
for dir in **/
do
for file in "$dir"/*
do
# [ -d "$file" ] && continue # пропускает папки
path=${file%/*}
name=${file#$path/}
name=${name//[^.[:alnum:]]/_}
mv "$file" "$path/${name^^}"
done
done
shopt -u globstar
fjf@fjf-Inspiron-530s:~/Рабочий стол/zz1601Jan181806$ ./16Jan18Two.sh
mv: не удалось выполнить stat для «2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir//*»: Нет такого файла или каталога
mv: не удалось выполнить stat для «2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir/Безымянная папка dir//*»: Нет такого файла или каталога
fjf@fjf-Inspiron-530s:~/Рабочий стол/zz1601Jan181806$ tree
.
├── 16Jan18Two.sh
└── 2016 Jan 18; 01:10 PM №001 ∗ש dir
├── 2016_JAN_18__01_11_PM________DIR
│ ├── 2016 Jan 18; 01:14 PM; Oakville, ON, Canada. м£®р„→° !"№;% ???.file
│ └── Безымянная папка dir
│ └── 2016Jan18131240 2016 Jan 18; 01:12 PM ↑↓€®.file
└── _______2016_JAN_18__01_16_PM_ДЖФОВ.FILE__
3 directories, 4 files
fjf@fjf-Inspiron-530s:~/Рабочий стол/zz1601Jan181806$
— Да и ещё регистр может всё нужно в нижнем? А лучше может его вообще не трогать, пусть будет какой есть. Я понял что он подправляется mv "$file" "$path/${name
^^}"
Пользователь решил продолжить мысль [time]19 Январь 2016, 07:11:11[/time]:
2016 Jan 18; 10:14 PM
— Директории наверное нужно отдельно менять чтобы путаница не возникла из-за путей… Или до замены файлов или после…
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan182151$ find . -type d | sort -r
./2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir/Безымянная папка dir
./2016 Jan 18; 01:10 PM №001 ∗ש dir/2016 Jan 18; 01:11 PM ³ ́§°£ dir
./2016 Jan 18; 01:10 PM №001 ∗ש dir
fjf@fjf-Inspiron-530s:~/Рабочий стол/z1601Jan182151$
— Как-то вот так наверное:
find . -type d | sort -r | while read d;do mv "$d" "а тут что-то правильное нужно придумать :)";done
— Я что-то вообще сначала упустил, что переименовывать нужно по отдельности из-за путей.