2015-03-25 4 views
0

У меня есть много файлов в папке с тем же расширением (например .vtk), и я использую скрипт bash для массивного переименования их с последовательными номерами. Вот скрипт я использую:Массивное переименование файлов, но сохранение одинаковой сортировки

n=0; 
for file in *.vtk; do 
${file} 100_${n}.vtk; 
n=$((n+1)); 
done 

После выполнения скрипта, все файлы переименовывать как:

100_1.vtk 
100_2.vtk 
. 
. 
. 

Моя проблема заключается в том, что я хочу, чтобы сохранить сортировку файлов точно так же, как и это было раньше. Например, если у меня было два последовательных файла с именем something.vtk и something_else.vtk, я хочу, чтобы они после процесса переименования соответствовали 100_1.vtk и 100_2.vtk соответственно.

+0

У вас есть 'mv' в вашем скрипте? Или просто эхо, чтобы показать, что произойдет? –

+0

Вывод файла glob перечисляет файлы в отсортированном по умолчанию порядке; это должно произойти автоматически. Вы уверены, что хотите потерять дополнительную информацию? Кроме того, вам нужно беспокоиться о сортировке: '100_1.vtk',' 100_10.vtk', '100_100.vtk',' 100_11.vtk', '100_12.vtk'? Если это так, стандартным способом борьбы с этим является добавление ведущих нулей. Для этого можно использовать команду 'printf'. –

ответ

1

Можете ли вы изменить свой for цикл из этого:

for file in *.vtk; do 

к этому:

for file in $(ls -1 *.vtk | sort); do 

Если имя файла не должно содержать пробелов, это должно работать.

0

Вы можете использовать сортировку -kX.Y! X ссылается на столбец и Y на символ. Итак, что-то вроде следующего должно быть хорошо:

$ ls | sort -k1.5 
Смежные вопросы