Переименуйте все файлы в каталоге, чтобы добавить начальный ноль - для имен файлов с разными «основами»

sed 's/:.*//' /etc/passwd | sort -r

sed - это s tream ed itor, который используется для применения команд редактирования текста к потокам текстовых данных. sed использует регулярные выражения для сопоставления шаблонов в строках текста. Регулярные выражения являются общими для многих команд Unix / Linux, таких как grep, awk, emacs, vi, perl, python и т. Д., Поэтому изучение регулярных выражений улучшит ваши навыки работы со многими различными командами.

Приведенная выше команда sed выполняет функцию s (подстановка) для каждой строки текста. Основная команда s работает следующим образом:

    `s/regular expression/replacement/`

Регулярное выражение в этой команде sed :. * соответствует первому двоеточию в строке, если оно есть, за которым следует 0 или более ( * ) любых других символов (. ) до (подразумеваемого) конца строки. sed заменяет все, что ему соответствует, ничем и печатает результаты.

Другими словами, эта команда sed удаляет от первого двоеточия до конца строки перед печатью строки.

0
21.05.2018, 20:25
2 ответа

Quiere que el Nen Var1_X_Var2_Y_Var3_Z_data_N.txtsea un cero -entero de dos -dígitos.

Suponiendo que todos los archivos afectados coincidan con el patrón*_[0-9].txt:

for name in *_[0-9].txt; do
    stem="${name%.txt}"    # remove the ".txt" suffix
    num=${stem##*_}        # extract the number at the end
    newname="${stem%[0-9]}$( printf '%02d.txt' "$num" )" # put it back together

    printf 'Would rename "%s" into "%s"\n' "$name" "$newname"
    # mv -- "$name" "$newname"
done
  • ${name%.txt}elimina .txtdel final de $name, el nombre de archivo original. Esto crea la "raíz", que no es realmente la raíz ya que todavía tiene el número al final.
  • ${stem##*_}elimina todo hasta el último guión bajo incluido en $stem.
  • ${stem%[0-9]}es la raíz sin el número al final (, p.Var1_X_Var2_Y_Var3_Z_data_).
  • printf '%02d.txt' "$num"produce un número de dos dígitos -lleno de cero -de $num, seguido de la cadena .txt.

Dado un directorio con los archivos

Var1_X_Var2_Y_Var3_Z_data_1.txt              Var1_X_Var2_Y_Var3_Z_data_23.txt
Var1_X_Var2_Y_Var3_Z_data_10.txt             Var1_X_Var2_Y_Var3_Z_data_24.txt
Var1_X_Var2_Y_Var3_Z_data_11.txt             Var1_X_Var2_Y_Var3_Z_data_25.txt
Var1_X_Var2_Y_Var3_Z_data_12.txt             Var1_X_Var2_Y_Var3_Z_data_26.txt
Var1_X_Var2_Y_Var3_Z_data_13.txt             Var1_X_Var2_Y_Var3_Z_data_27.txt
Var1_X_Var2_Y_Var3_Z_data_14.txt             Var1_X_Var2_Y_Var3_Z_data_28.txt
Var1_X_Var2_Y_Var3_Z_data_15.txt             Var1_X_Var2_Y_Var3_Z_data_29.txt
Var1_X_Var2_Y_Var3_Z_data_16.txt             Var1_X_Var2_Y_Var3_Z_data_3.txt
Var1_X_Var2_Y_Var3_Z_data_17.txt             Var1_X_Var2_Y_Var3_Z_data_30.txt
Var1_X_Var2_Y_Var3_Z_data_18.txt             Var1_X_Var2_Y_Var3_Z_data_4.txt
Var1_X_Var2_Y_Var3_Z_data_19.txt             Var1_X_Var2_Y_Var3_Z_data_5.txt
Var1_X_Var2_Y_Var3_Z_data_2.txt              Var1_X_Var2_Y_Var3_Z_data_6.txt
Var1_X_Var2_Y_Var3_Z_data_20.txt             Var1_X_Var2_Y_Var3_Z_data_7.txt
Var1_X_Var2_Y_Var3_Z_data_21.txt             Var1_X_Var2_Y_Var3_Z_data_8.txt
Var1_X_Var2_Y_Var3_Z_data_22.txt             Var1_X_Var2_Y_Var3_Z_data_9.txt

.. ese bucle produciría

Would rename "Var1_X_Var2_Y_Var3_Z_data_1.txt" into "Var1_X_Var2_Y_Var3_Z_data_01.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_2.txt" into "Var1_X_Var2_Y_Var3_Z_data_02.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_3.txt" into "Var1_X_Var2_Y_Var3_Z_data_03.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_4.txt" into "Var1_X_Var2_Y_Var3_Z_data_04.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_5.txt" into "Var1_X_Var2_Y_Var3_Z_data_05.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_6.txt" into "Var1_X_Var2_Y_Var3_Z_data_06.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_7.txt" into "Var1_X_Var2_Y_Var3_Z_data_07.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_8.txt" into "Var1_X_Var2_Y_Var3_Z_data_08.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_9.txt" into "Var1_X_Var2_Y_Var3_Z_data_09.txt"

Elimine el comentario mval final del bucle para cambiar el nombre de los archivos.

2
28.01.2020, 02:32
find -name "*_[1-9].txt" -exec sh -c 'echo $1 ${1%_*}_0${1##*_}' _ {} \;
  • El $1está sustituyendo con el archivo encontrado.
  • El ${1%_*}está eliminando todo después de el último guión bajo y el propio guión bajo.
  • Este _0solo imprime un guión bajo seguido de un cero.
  • Esto ${1##*_}elimina todo antes de el último guión bajo y el propio guión bajo.

reemplace echocon mvpara cambiar el nombre de los archivos.


Usé esto para crear 3o archivos

touch Var1_${RANDOM}_Var2_${RANDOM}_Var3_${RANDOM}_data_{1..30}.txt
0
28.01.2020, 02:32

Теги

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