Названия скопированных файлов от USB-устройства до жесткого диска все стали прописными. Как зафиксировать его?

Хорошо, это - близкое:

awk -F "[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9]" '{for (i=1; i<= NF; i++) if ( $i ~ /[e|E]xception/ ) print $i} RS=""' t.txt

Я использую метку времени regex в качестве FS и ищу Исключение в полях. Не прекрасный, но близкий.

После цитирования обеих частей журналов OP, если, вывод я добрался, следующие:

Initializing Spring framework Logs<br>
Oct 18, 2013 6:14:33 AM org.apache.catalina.startup.Embedded start<br>
INFO: Starting tomcat server<br>
Oct 18, 2013 6:14:34 AM org.apache.catalina.core.StandardEngine start<br>
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32<br>
Oct 18, 2013 6:14:35 AM org.apache.catalina.startup.ContextConfig <br>efaultWebConfig
INFO: No default web.xml<br>
Oct 18, 2013 6:14:38 AM org.apache.catalina.session.StandardManager doLoad<br>
SEVERE: IOException while loading persisted sessions: <br>java.io.WriteAbortedException: writing aborted; <br>java.io.NotSerializableException: ads.doc.backoffice.StoreInfos<br>
java.io.WriteAbortedException: writing aborted; <br>java.io.NotSerializableException: ads.doc.backoffice.StoreInfos
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)<br>
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
...... <br>
...... <br>
...... <br>
...... <br>
    at ads.tools.AppServerMain.main(AppServerMain.java:83)<br>
Caused by: java.io.NotSerializableException: ads.doc.backoffice.StoreInfos<br>
INFO: Jk running ID=0 time=0/105  config=null<br>

 CronServer:: DailyJob ads.tools.UpdateSummaries@17c5d6cf failed with exception ads.util.AppError: Cannot create UnitName from keys: Each
ads.util.AppError: Cannot create UnitName from keys: Each
at ads.db.DBObjectDefault.createFromKeys(DBObjectDefault.java:42)
at ads.db.DBTable.createFromKeys(DBTable.java:227)
at ads.db.DBValue.getValue(DBValue.java:621)
at ads.dbmanager.DBObjectsManager.initObjects(DBObjectsManager.java:400)
at ads.dbmanager.DBObjectsManager.reload(DBObjectsManager.java:447)
at ads.dbmanager.DBObjectsManager.loadFromStore(DBObjectsManager.java:497)
at ads.doc.inventory.InventoryItemSummary.refreshSince(InventoryItemSummary.java:173)
at ads.db.DBSummaryTable.refreshAll(DBSummaryTable.java:67)
at ads.tools.CronServer$DailyThread.run(CronServer.java:271)
[SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket: java.net.ConnectException: Connection refused; targetException=java.lang.IllegalArgumentException: Error opening socket: java.net.ConnectException: Connection refused]
at org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.java:354)
at org.apache.soap.rpc.Call.invoke(Call.java:248)
at ads.support.SupportCall.call(SupportCall.java:56)
at ads.tools.SupportThread.run(SupportThread.java:101)

 Periodic support request failed: ads.support.SupportException: Error opening socket: java.net.ConnectException: Connection refused

 Upload failed: java.io.FileNotFoundException: c:/tmp/cygwin1.dll (No such file or directory)
2
09.08.2014, 21:56
2 ответа

Вы можете исправить это (каждый раз, когда это происходит) с помощью этой команды:

find local_directory_name -depth -exec sh -c 'dir = "$ (dirname" $ 0 ")"; ФАЙЛ = "$ (базовое имя" $ 0 ")"; lowfile = "$ (echo" $ FILE "| tr" A-Z "" a-z ")"; если ["$ lowfile"! = "$ FILE"]; затем mv "$ 0" "$ dir / $ lowfile"; fi '{} ";"

Введите все это как одну строку (заменив local_directory_name именем каталога, в который вы скопировали файлы). Вы можете разбить его на несколько строк, вставив обратную косую черту. Или вы можете поместить часть после sh -c в файл сценария.

Это перечисляет все файлы в каталоге (включая подкаталоги, рекурсивно). и выполняет заданные команды на каждом из них. -depth заставляет его работать «снизу вверх», поэтому он обрабатывает все записи в каталоге перед тем, как он обработает (переименует) сам каталог. Каждое имя файла (относительный путь, начинающийся с local_directory_name ) разбивается на части в часть каталога и простое имя файла (только нижний компонент). Затем имя файла преобразуется из верхнего регистра в нижний. Если это отличается от существующего имени файла, он переименовывает файл в имя в нижнем регистре. Я добавил эту проверку, чтобы предотвратить диагностические сообщения, которые вы иначе получили бы от попытки переименовать файл в себя, что могло бы произойти, если бы у вас был файл в имени которого не было букв (т. е. были только цифры и специальные символы). Или, если на то пошло, если у вас есть файл, имя которого не содержит заглавных букв.

Запоздалые мысли: другой способ избежать ошибок mv 123 123 - добавить -name "* [A-Z] *" после -depth , который сообщает find обрабатывать только имена, содержащие хотя бы одну заглавную букву.

3
27.01.2020, 21:52

Вы упомянули, что используете файловую систему FAT32. FAT, как и NTFS, являются FSes с нечувствительным к регистру. Я предполагаю, что драйвер делает заглавные буквы только для того, чтобы убедиться, что в dir с таким же именем (хотя и с другим корпусом) нет >1 файла.

Описываемая вами проблема существует уже некоторое время. См., например, эта резьба из 2008 г.

Я предлагаю использовать другой FS или использовать архивы TAR на дисках FAT/NFTS для сохранения корпуса.

.
4
27.01.2020, 21:52

Теги

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