LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Во-первых, в баше и команды перемещения нет. mv это внешняя программа, она не часть шелла. Вы (всмысле, не только ты, а ещё много кто) достали называть башем всё что связано со скриптами, перестаньте так делать.

Во-вторых, да, ты прав, стандартной проги для переименования нет, сам был в недоумении когда она понадобилась. А у mv совершенно плохой синтаксис запуска, надо постараться чтоб он не сделал что-то не то в непредвиденной ситуации - то есть это программа скорее для интерактивного использования (в шелл-приглашении, да) чем для скриптов.

Ну я по-быстрому написал её, чего там возиться то? К сожалению я не помню где именно она мне была нужна и соответственно где исходник, но вот он примерно такой:

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

int main(int argc, char **argv) {
  int j, verbose;
  j = 1; verbose = 0;
  if(j+2<argc && !strcmp(argv[j],"-v")) { j++; verbose = 1; }
  if(argc!=j+2) { fprintf(stderr, "Usage: %s [-v] /path/to/source /path/to/target\n", argv[0]); return -1; }
  if(rename(argv[j], argv[j+1])<0) {
    fprintf(stderr,"rename \"%s\" -> \"%s\" error %d (%s)\n", argv[j], argv[j+1], errno, strerror(errno));
    return -1;
  }
  if(verbose) printf("renamed \"%s\" -> \"%s\"\n", argv[j], argv[j+1]);
  return 0;
}

Исходная версия firkax, :

Во-первых, в баше и команды перемещения нет. mv это внешняя программа, она не часть шелла. Вы (всмысле, не только ты, а ещё много кто) достали называть башем всё что связано со скриптами, перестаньте так делать.

Во-вторых, да, ты прав, стандартной проги для переименования нет, сам был в недоумении когда она понадобилась. А у mv совершенно плохой синтаксис запуска, надо постараться чтоб он не сделал что-то не то в непредвиденной ситуации - то есть это программа скорее для интерактивного использования (в шелл-приглашении, да) чем для скриптов.

Ну я по-быстрому написал её, чего там возиться то? К сожалению я не помню где именно она мне была нужна и соответственно где исходник, но вот он примерно такой:

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

int main(int argc, char **argv) {
  int j, verbose;
  j = 1; verbose = 0;
  if(j<argc && !strcmp(argv[j],"-v")) { j++; verbose = 1; }
  if(argc!=j+2) { fprintf(stderr, "Usage: %s [-v] /path/to/source /path/to/target\n", argv[0]); return -1; }
  if(rename(argv[j], argv[j+1])<0) {
    fprintf(stderr,"rename \"%s\" -> \"%s\" error %d (%s)\n", argv[j], argv[j+1], errno, strerror(errno));
    return -1;
  }
  if(verbose) printf("renamed \"%s\" -> \"%s\"\n", argv[j], argv[j+1]);
  return 0;
}