При удалении файла я пытаюсь переименовать все файлы по порядковому номеру переменной.
У меня есть список файлов.Каждый из них назван в шестнадцатеричном и увеличен в зависимости от количества файлов в папке;когда создаются новый файл в этой папке
312d416e64207768657265206172652077652e2e20f09f8e88; # 1-файл - первый файл 332df09f8eb220556e64657220436f6e737472756374696f6e20f09f8eb2;. # 2-файл второго файл 332df09f8cb22043686e6167654c6f6720f09f8cb2; # 3-файл третий файл
1007 *
Я пытаюсь удалить первые четыре или комбинацию: 3x2d из каждого из этих файлов, а затем переименовать их в правильной последовательности
Мой код выглядит следующим образом:
set symbol [ixc::2Hex "-"] ;# 2d
set contents [glob -directory $dir *]
append sorted [lsort -dictionary $contents]
foreach item $sorted {
incr baseCount
set ze [file tail $item]
set hexCount [ixc::2Hex "$baseCount"] ;#convert ascii to hex
set hexZe "[string trim $ze "$hexCount$symbol"]" ;#trim the hexcount and delmiter from the file name
#set hexZe [regsub "$hexCount$symbol" $ze ""] ;#Alternative way of removing characters but buggy
puts "rename >> $item to $hexCount$symbol$hexZe"
puts "----"
# catch the error if the "cannot rename same file"
# this occurs when the file deletes
# then rename tries to rename the same file as the same file
if { [catch {file rename $item $dir/$hexCount$symbol$hexZe} error] } {
continue
} else {
set fexist "$item"
#rename the file as the hexValue based off the counted ascii value
#include the symbol and file name
#if the file does not exist such as the deleted file then skip
if { $fexist eq 1} {
file rename $item $dir/$hexCount$symbol$hexZe
} else {
continue
}
Это работает точно так же, как и работает, и это именно тот результат, который я хочу
Однако он выполняет обрезку любого числа «2»
332df09f8eb220556e64657220436f6e737472756374696f6e20f09f8eb 2
Это приводит к нарушению гексагона, если вы должны были декодировать его обратно в ascii.
Используя regsub.Это работает, но дает забавные результаты.
set hexZe [regsub "$hexCount$symbol" $ze ""]
, что приводит к чему-то вроде:
372d382d f09f8cb22043686e6167654c6f6720f09f8cb2; # результат: 7-8-filename
Я предполагаю, что это потому, что я удаляю строку «3x2d» из строки при каждом цикле цикла.
tl; dr: хочу удалить «312d» из имени файлаи затем переименуйте файл с правильным инкрементным номером на основе счетчика каталога, разделенного символом "-"
cheers