переименование файлов *.txt.csv в .csv в скрипте bash

#linux #bash #shell #csv #export-to-csv

Вопрос:

У меня есть файлы .txt, которые я беру как $item, а затем меняю кодировку с помощью

 iconv -f $currentEncoding -t $targetEncoding "$item" -o "$item.tmp"
 

затем я снова сохраняю его в txt-файл, используя

  mv "$item.tmp" "$item.txt";
 

затем я обрезаю несколько вещей в txt-файле и сохраняю его в виде csv-файла с

  tr -d '"' < "$item.txt" > "$item.csv";
 

но в конце концов мои файлы будут храниться с расширением «*.txt.csv» — я хочу, чтобы они были просто .csv — кто-нибудь может мне помочь, пожалуйста, что я делаю неправильно или что я могу изменить. Спасибо

Ответ №1:

Бежать:

 for f in *.txt.csv; do mv $f ${f/.txt./.}; done
 

Если переменная $f содержит строку item.txt.csv , выражение ${f/.txt./.} удаляется .txt из имени файла и выдает только строку item.csv .

Внимание: если одно из имен файлов содержит пробелы, for инструкция не будет работать должным образом.

Ответ №2:

Из того, что я понимаю, ваш товар в $уже имеет значение .txt. Итак, если вы перечисляете свои файлы после каждой команды, вы должны увидеть промежуточные файлы, такие как

 xyz.txt.tmp
xyz.txt.txt
xyz.txt.csv
 

Поэтому, когда вы устанавливаете переменную item, просто сделайте ${item%%.*}, как показано ниже, и это должно работать так, как ожидалось.

 item=xyz.txt               
item="${item%%.*}"    
echo $item        
xyz