2015-07-01 3 views
1

У меня есть файлы, такие какКак удалить определенную часть имени файла?

#md0.xvg# 
#md0.xvg# 
#md0.05.xvg# 
#md0.05.edr# 
#md0.1.edr# 
#md0.1.xvg# 
: : 
: : 

#md1.xvg# 
#md.edr# 

Я хочу переименовать их без #.

md1.xvg 
md1.agr 

Я хотел написать программу в C или оболочке Но, я понятия не имею, с чего начать. Если кто-то может помочь, я буду благодарен.

ответ

0

Использование tr (Exemple с Zsh)

 
% tr -d '#' <<EOF 
heredoc> #md0.xvg# 
heredoc> #md0.xvg# 
heredoc> #md0.05.xvg# 
heredoc> #md0.05.edr# 
heredoc> #md0.1.edr# 
heredoc> #md0.1.xvg# 
heredoc> : : 
heredoc> : : 
heredoc> #md1.xvg# 
heredoc> #md.edr# 
heredoc> EOF 

Результат будет

 
md0.xvg 
md0.xvg 
md0.05.xvg 
md0.05.edr 
md0.1.edr 
md0.1.xvg 
: : 
: : 
md1.xvg 
md.edr 

Некоторые другие варианты без Heredoc, предполагая, что файл с вашими данными, называется yourfile.txt

% tr -d '#' < yourfile.txt 
% cat yourfile.txt | tr -d '#' 

Используйте > перенаправление для отправки вывода в другой файл

% tr -d '#' <yourfile.txt> newfile.txt 
+0

Я не мог понять ваш ответ. Что это за heredoc>, Кажется, это не работает для меня. –

+0

* heredoc * вещь - это всего лишь способ получить данные в 'tr'. Вы можете использовать свой файл, например, 'tr -d '#' ' redirection 'tr -d '#' newfile.txt' – pmg

0

Существует множество способов. В C одним из самых простых способов будет использование индексации массива для удаления #. Примеры Алгоритм

  • Необходимое условие: Имена файлов в формате #......#
  • Цель: Получить имя файла без начала и конца # с.
  • Алгоритм:

    1. Прочитать имя файла в массив, скажем source_buffer.
    2. рассчитать strlen(), хранить в len (или что-то еще).
    3. создать буфер назначения (скажем, dest_buffer), который будет содержать измененное имя файла.
    4. memcpy(dest_buffer, &source_buffer[1], len-2);
    5. null-terminate dest_buffer.

В качестве альтернативы, для более сложного и изощренного шаблона именования, вы можете посмотреть в манипулятивных функции строки прототипов в string.h заголовке, как strchr()/strrchr()

0

Использование bash для переименования файлов, как

for i in ${files[@]}; do 
    new_name=$(tr -d '#' $i) 
    mv $i $new_name 
done 

В качестве альтернативы, этот код C удаляет первый и последний символы из имени файла, предоставленного в качестве аргумента командной строки

#include <stdio.h> 
#include <string.h> 

int main(int argc, char ** argv) { 
    char * oldname = argv[1]; 
    char * newname = strdup(argv[1]); 
    newname++; 
    newname[strlen(newname) - 1] = 0; 

    if (rename(oldname, newname)) 
     printf("Error: unable to rename the file"); 
    else 
     printf("File renamed successfully"); 
    return 0; 
} 
2

Вы можете использовать следующую Баш скрипт или команду

$ rename 's/\#//g' * -v 

переименовывать: Команда

's/\ # // г': Заменить выражение

*: Все файлы

-v: Многословный

Выражения деталь:

s //#  /  /g 
^  ^^    ^^^^^^ ^
Replace # character with nothing all 

Если вы хотите сделать всухую (не фактическое переименование), используйте следующую команду:

$ rename 's/\#//g' * -vn 

Он просто скажет существующее и новое (переименованное) имя файлов и выиграть, сделать фактическое переименование.

0

С Баш, Вы можете использовать:

for i in ${files[@]}; do 
    mv $i ${i//#/} 
done 

с с, Вы можете использовать функцию strtok(), чтобы удалить '#', то мв.

strcpy(temp, path);  
token = strtok(path, "#"); 
system("mv temp token"); 
Смежные вопросы