написать цикл для перехода в папки подкаталогов, а затем скопировать и переименовать имена папок в unix - PullRequest
0 голосов
/ 20 января 2019

Уважаемые Stackoverflowers,

У меня проблемы с записью цикла, который переходит в каталог с несколькими папками и копиями и перемаркирует имя каждой папки.Каждая из папок помечается одинаково для запуска, за которой следуют разные номера, поэтому структура имеет вид:

groupfolder1  
   123456789_ab_1234  
   123456789_ab_1235  
   123456789_ab_1236  
   123456789_ab_1237  

groupfolder2  
   123456789_cd_1310  
   123456789_cd_1321    
   123456789_cd_1322  
   123456789_cd_1323  

Я хочу перейти в каждую папку группы (например, 123456789_ab_1234) и создать новую папку сто же самое содержание, но с пометкой (например, sub-1234).

Я пытаюсь изучить Unix, но пытаюсь перейти от выполнения абстрактных упражнений к реальным проблемам, поэтому очень ценю ответы и любые объяснения того, как вы пришлик решению.

С уважением E

Ответы [ 2 ]

0 голосов
/ 23 января 2019

woops разместил это в неправильном разделе.Спасибо за объяснение.

Я попробовал это: cd / media / Eunice / 'Drive B' / groupfolder1 / для d in * do, если test -d $ d, то mkdir / tmp / sub- $ d (cd$ d; tar cf -.) |(cd / tmp / sub- $ d; tar xf -) mv / tmp / sub- $ d $ d /.fi done

и получил эту ошибку.mkdir: невозможно создать каталог '/ tmp / sub-123456789_ab_1234': нет такого файла или каталога -bash: cd: / tmp / sub-123456789_ab_1234: такого файла или каталога нет

Меня беспокоит, что здесь 'd'относится к папке «123456789_ab_1234» и для создания новой папки мне нужно взять числа после «123456789_ab_», чтобы сделать метку для новой папки, например sub-1234.Есть ли способ легко идентифицировать «d» как «1234»

0 голосов
/ 20 января 2019

Если я хорошо понимаю, что вы хотите что-то вроде

for d in *
do
  if test -d $d
  then
    mkdir /tmp/sub-$d
    (cd $d ; tar cf - .) | (cd /tmp/sub-$d ; tar xf -)
    mv /tmp/sub-$d $d/.
  fi
done

Выше, я полагаю, вы уже в groupfolder1, например

Я не знаю, как все ваши каталоги, возможно, выМожно добавить цикл встраивания для запуска на родительском уровне, содержащий groupfolder1 / groupfolder2 и т. д., и перейти в них автоматически следующим образом:

for dd in *
do
  if test -d $dd
  then
    cd $dd
    for d in *
    do
      if test -d $d
      then
        mkdir /tmp/sub-$d
        (cd $d ; tar cf - .) | (cd /tmp/sub-$d ; tar xf -)
        mv /tmp/sub-$d $d/.
      fi
    done 
    cd ..
  fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...