LINUX.ORG.RU

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


0

1

Необходимо обойти кучу директорий и переименовать все файлы и директории, начинающиеся с вопросительного знака. При этом у файлов надо сохранить расширения. Имена файлов могут содержать пробелы (имена вида ??? ?? ???.txt) Экранирую их, но все-равно скрипт обламывается. Использую find и mv. Вроде бы получается, но не всё. Директории не может переименовать. Как в результатах поиска find экранировать вопросительные знаки в имени директории?

fletch@dustbin ~/test $ ls -la
итого 110332
drwxrwxrwx  3 fletch users      4096 авг.  31 17:01 ????? ????
drwxrwxrwx  4 fletch users      4096 авг.  30 16:44 ????????
drwxrwxrwx  4 fletch users      4096 дек.  31  2010 ?????????
drwxr-xr-x  5 fletch users      4096 сент. 25 12:00 .
drwx------ 83 fletch users     36864 сент. 24 17:17 ..
-rwxrwxrwx  1 fletch users 112166599 янв.  31  2011 ????? ?13.rar
-rwxrwxrwx  1 fletch users    114176 февр. 20  2012 ?????? - ???????? ?.?..doc
-rwxrwxrwx  1 fletch users    628736 янв.  31  2012 ????? ?? ??????.ppt
-rwxr-xr-x  1 fletch users       583 сент. 25 12:03 rename.sh
-rwxrwxrwx  1 fletch users        61 янв.   4  2011 ??????.txt
fletch@dustbin ~/test $ ./rename.sh 
./rename.sh: command substitution: line 4: unexpected EOF while looking for matching `''
./rename.sh: command substitution: line 5: ошибка синтаксиса: неожиданный конец файла
cat: dirlist.txt: Нет такого файла или каталога
mv: указанная цель «3WQUkWH.doc» не является каталогом
mv: указанная цель «.?2doc.doc» не является каталогом
mv: указанная цель «BXCUQ.doc» не является каталогом
mv: невозможно переместить «????????/psholog/????????/???» в «SWqsHxJg7Z.????????/psholog/????????/???»: Нет такого файла или каталога
mv: невозможно переместить «????????/psholog/????????/????» в «79BHCOR92g.????????/psholog/????????/????»: Нет такого файла или каталога
mv: невозможно переместить «????????/psholog/????????/?????2/amthauer.003/????? INSTRUKT.TXT» в «YUpmPcXAAa.003/????? INSTRUKT.TXT»: Нет такого файла или каталога
mv: невозможно переместить «????????/psholog/????????/?????2/testtwo.008/???10.PIF» в «KBiSPzZkzX.008/???10.PIF»: Нет такого файла или каталога
mv: невозможно переместить «????????/psholog/????????/?????2/PGT.004/????? PGT.TXT» в «S6vsdP9zvV.004/????? PGT.TXT»: Нет такого файла или каталога
mv: невозможно переместить «????????/psholog/????????/?????2/Ket3.001/?????? ?????? ?????????????.doc» в «lCAY9dfW5J.001/?????? ?????? ?????????????.doc»: Нет такого файла или каталога
mv: невозможно переместить «????????/psholog/????????/?????2/LUSHER2.002/?????-2.pif» в «BJal54KRC4.002/?????-2.pif»: Нет такого файла или каталога
mv: указанная цель «WcLKvDtxLx.pif» не является каталогом
mv: указанная цель «Dyg8N.pif» не является каталогом
mv: указанная цель «8Lu8jvgEjq.doc» не является каталогом
mv: указанная цель «KN8zLCqXgT.doc» не является каталогом
mv: указанная цель «t2Kygpb12z.doc» не является каталогом
mv: указанная цель «F3Pah.doc» не является каталогом
mv: указанная цель «DGa5KelI.swf» не является каталогом
mv: невозможно переместить «????????/psholog/?????2/amthauer.003/????? INSTRUKT.TXT» в «xPqbI5WK5e.003/????? INSTRUKT.TXT»: Нет такого файла или каталога
mv: указанная цель «Y.doc» не является каталогом
mv: указанная цель «BlK1C.doc» не является каталогом
mv: указанная цель «iFFU.doc» не является каталогом
mv: указанная цель «.tif» не является каталогом
mv: после «f8yc72et9Y.» пропущен операнд, задающий целевой файл
Попробуйте «mv --help» для получения более подробного описания.
fletch@dustbin ~/test $ ls -la
итого 351104
drwxrwxrwx  3 fletch users      4096 авг.  31 17:01 ????? ????
drwxrwxrwx  4 fletch users      4096 авг.  30 16:44 ????????
drwxrwxrwx  4 fletch users      4096 сент. 25 12:03 ?????????
drwxr-xr-x  5 fletch users      4096 сент. 25 12:03 .
drwx------ 83 fletch users     36864 сент. 24 17:17 ..
-rwxrwxrwx  1 fletch users    851194 июня   2  2003 34wIP4KoOm.exe
-rwxrwxrwx  1 fletch users     78848 окт.   6  2003 7iQPeg6TzU.doc
-rwxrwxrwx  1 fletch users     23040 нояб.  4  2002 9jG5NfWugv.doc
-rwxrwxrwx  1 fletch users    568832 дек.  28  2010 AIUITc4p0M.ppt
-rwxrwxrwx  1 fletch users    403410 дек.  28  2010 BjNiTcGOix.docx
-rwxrwxrwx  1 fletch users     37376 сент. 22  2003 bNlKHYZFHX.doc
-rwxrwxrwx  1 fletch users    281523 дек.  28  2010 BSJsYwTFpK.pdf
-rwxrwxrwx  1 fletch users     36352 марта 31  2009 COUhTjRo8d.doc
-rwxrwxrwx  1 fletch users     21504 нояб.  4  2002 csA0MyFNZ9.doc
-rwxrwxrwx  1 fletch users    203776 дек.  17  2010 DSZDvQO8UZ.xls
-rwxrwxrwx  1 fletch users     44032 сент. 29  2003 fejo7MiNSq.doc
-rw-r--r--  1 fletch users      3299 сент. 25 12:03 flist.txt
-rwxrwxrwx  1 fletch users  47105342 дек.  13  2010 fNQLayNhAd.rar
-rwxrwxrwx  1 fletch users     35840 сент. 22  2003 fREGRWlTkA.doc
-rwxrwxrwx  1 fletch users    114176 февр. 20  2012 g4K3HSB0bS.?..doc
-rwxrwxrwx  1 fletch users   1128067 дек.  28  2010 GEB9RNq9Qw.pdf
-rwxrwxrwx  1 fletch users    110080 сент. 15  2003 GO13819XMj.doc
-rwxrwxrwx  1 fletch users     99840 марта 31  2009 hoZT6K2av5.doc
-rwxrwxrwx  1 fletch users     93696 сент. 27  2003 Hr7haWelV1.doc
-rwxrwxrwx  1 fletch users     92430 дек.   6  2010 iNLV44ZME6....JPG
-rwxrwxrwx  1 fletch users     39936 июня  21  2007 iX3Pppol8q.doc
-rwxrwxrwx  1 fletch users     31744 окт.   1  2003 IXdNUwP24W.doc
-rwxrwxrwx  1 fletch users    444507 дек.  28  2010 jPF0XAV0aU.pdf
-rwxrwxrwx  1 fletch users   2099200 мая    9  2011 jxrXiucazK..doc
-rwxrwxrwx  1 fletch users    129536 окт.   7  2003 Kc6fLv67rf.?? ????).doc
-rwxrwxrwx  1 fletch users     37376 сент. 16  2003 kTkV62TESp.doc
-rwxrwxrwx  1 fletch users     99840 апр.   3  2009 L0LPE9m6lH.doc
-rwxrwxrwx  1 fletch users     38912 апр.   3  2009 LYK9N4W8ZB.doc
-rwxrwxrwx  1 fletch users     83968 марта 31  2009 m4glWRbyOz.doc
-rwxrwxrwx  1 fletch users     84480 сент. 22  2003 MruYRVw5A9.doc
-rwxrwxrwx  1 fletch users 183094460 дек.  13  2010 Nm3xtZ8aGd.rar
-rwxrwxrwx  1 fletch users     59904 дек.  29  2010 o83Hgt0vTe.xls
-rwxrwxrwx  1 fletch users     36864 марта 30  2009 OkDg86i2ca.doc
-rwxrwxrwx  1 fletch users     43008 марта 31  2009 pQxUZjEBaq.doc
-rwxrwxrwx  1 fletch users    181760 янв.  11  2007 prxUQDKFwI.doc
-rwxrwxrwx  1 fletch users    216576 дек.  23  2010 Q1bhYq1Sy8.xls
-rwxrwxrwx  1 fletch users    309760 авг.   6  2003 QGE4zGoK2L.doc
-rwxrwxrwx  1 fletch users     23040 нояб.  4  2002 QuezwdqmCW.doc
-rwxrwxrwx  1 fletch users    164352 марта 31  2009 R4Z0pQbClc.doc
-rwxr-xr-x  1 fletch users       583 сент. 25 12:03 rename.sh
-rwxrwxrwx  1 fletch users     53760 дек.  18  2003 ShxM4bZJ1f.doc
-rwxrwxrwx  1 fletch users        61 янв.   4  2011 sMXoXTMlLX.txt
-rwxrwxrwx  1 fletch users     30720 марта 31  2009 SsUZc4bY3Z.doc
-rwxrwxrwx  1 fletch users     50176 сент. 15  2003 sTgSmyJ5iv.doc
-rwxrwxrwx  1 fletch users     40960 окт.   4  2003 SVYIt8M16d.doc
-rwxrwxrwx  1 fletch users    109056 июня   4  2010 uefbIVegKE.doc
-rwxrwxrwx  1 fletch users   7204507 марта 26  2009 vFuS8XBRea.rar
-rwxrwxrwx  1 fletch users    251275 марта 12  2011 VltPWD7aWi.jpeg
-rwxrwxrwx  1 fletch users     31824 июня   2  2003 vOoubywPPk.swf
-rwxrwxrwx  1 fletch users    628736 янв.  31  2012 wRSP0wGcc5.ppt
-rwxrwxrwx  1 fletch users     29184 дек.  29  2010 WSxaJe4ohx.xls
-rwxrwxrwx  1 fletch users 112166599 янв.  31  2011 xAmkUpbi5m.rar
-rwxrwxrwx  1 fletch users     61952 сент. 20  2003 YHAYuL4lmt.doc
-rwxrwxrwx  1 fletch users     26112 нояб.  7  2002 YI0wddJou4.doc
-rwxrwxrwx  1 fletch users    127488 марта 31  2009 zR6hh5p0bO.doc
fletch@dustbin ~/test $ 

Может это правильнее осуществить через find -exec?

★★

Последнее исправление: Fletch (всего исправлений: 1)

Это не вопросительные знаки, ls так отображает нечитаемые символы.

anonymous
()

Ну и да, где код скрипта, норкоман?

anonymous
()

Некоторые директории переименовывает, но на одной обламывается. Сам скрипт:

#!/bin/bash
IFS='\n'
#Search for crippled dirs with question marks and rename them first
dirlist=`find . -type d -name "\?*" | xargs -0 echo > dirlist.txt`
cat dirlist.txt | while read dname
do
rand=`cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 10| head -n 1`
mv $dname $rand
done
#Search for files with question marks and rename them first
flist=`find . -type f -name "\?*" | sed 's/^..//' | xargs -0 echo > flist.txt`
cat flist.txt | while read fname
do
rand=`cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 10| head -n 1`
ext=${fname#*.}
mv $fname $rand.$ext
done

Fletch ★★
() автор топика
Ответ на: комментарий от joy4eg

Нет, кодировка уже пошла по п3,14, сейчас надо просто дать именам рандомные названия, иначе винда не могёт открыть директорию под знаками вопроса.

Fletch ★★
() автор топика
Ответ на: комментарий от Fletch

Некоторые директории переименовывает, но на одной обламывается

переименуй ее руками)

quest ★★★★
()
Ответ на: комментарий от Fletch

и ставить и не надо, просто в сорсе посмотреть

amorpher ★★★★★
()
{ find -type f && find -type d; } | prename 's/[^a-z0-9.]/"%" . ord $&/ige'

По желанию в квадратных скобках можно дописать ещё символов, которые не надо превращать в цифры. prename --- перловый скрипт для переименования файлов, у меня идёт вместе с перлом.

anonymous
()
Ответ на: комментарий от Fletch

mv $dname $rand mv $fname $rand.$ext

Ну и кто будет всё это в двойные кавычки заключать? Пробелы, Люк, пробелы! «$dname» «$rand» «$fname» и т. д.

anonymous
()
Ответ на: комментарий от anonymous

Только подкрути rand для уникальности имен.

anonymous
()

Возьми уже мой rename_translit, только копировать файлы сначала научись, чтобы кодировка в «вопросики» не превращалась.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.