Команда mv для перемещения и переименования набора файлов

Я разобрался. Для всех, кто хочет добиться того же, я установил сочетание клавиш в «Настройки клавиатуры» в разделе «Переключиться на ранее выбранное рабочее пространство».

1
04.01.2017, 17:27
2 ответа

Предположим, у вас есть переменная t1 , которая содержит набор значений, разделенных запятыми:

t1=$(GetValueOfT1)    # For example t1='123,456,789'

Вы можете применить каждое из них по очереди с помощью такого цикла

OIFS="$IFS" IFS=,
for v in $t1
do
    echo "Processing with v=$v:" >&2
    mv "$SRC_PATH/ABC_${v}.dat" "$DEST_PATH/ABC_${v}_$$.dat"
done
IFS="$OIFS"

Первый $ t1 нельзя заключать в кавычки, потому что оболочка должна разделять значение по символам запятой. (Это контролируется переменной оболочки $ IFS , которую мы сохраняем, чтобы мы могли восстановить ее в конце цикла.) Все остальные переменные должны быть заключены в кавычки, чтобы защитить их от неожиданного разделения слов на пробелы. , запятые и т. д. Наконец, вы должны представить $ v как $ {v} , потому что в противном случае оболочка будет включать следующий за ним символ _ как часть имя переменной, а $ v_ - это не то, что нам нужно.

Я бы порекомендовал вам префикс mv с помощью echo (т.е. echo mv ... ), прежде чем запускать это на практике, чтобы вы могли проверить вывод, прежде чем он что-либо изменит.

0
27.01.2020, 23:34

Существуют команды для такого массового переименования.

Лично я использую mmv :

mmv <SRC_PATH>/"ABC_*.dat" <DEST_PATH>/"ABC_#1_$$.dat"
2
27.01.2020, 23:34

Теги

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