2014-09-28 2 views
0

Я пытаюсь взять некоторые каталоги и перенести их из Linux в Windows. Проблема в том, что в файлах Linux есть двоеточия. И мне нужно скопировать эти каталоги (я не могу их напрямую изменить, так как они необходимы, так как они являются сервером) для файлов с именем, которое Windows может использовать. Например, имя каталога на сервере может быть:Удаление колоний из нескольких пластов в Linux

IAPLTR2b-ERVK-LTR_chr9: 113137544-113137860_-

в то время как мне нужно, чтобы это было:

IAPLTR2b-ERVK-LTR_chr9-113137544 -113137860_-

У меня около шестидесяти этих каталогов, и я собрал имена файлов с их абсолютными путями в файле, который я вызываю directories.txt. Мне нужно пройти через этот файл, изменив двоеточия на дефисы. До сих пор моя попытка это:

#!/bin/bash 

$DIRECTORIES=`cat directories.txt` 
for $i in $DIRECTORIES; 
do 
    cp -r "$DIRECTORIES" "`echo $DIRECTORIES | sed 's/:/-/'`" 
done 

Однако я получаю ошибку:

./my_shellscript.sh: строка 10: =/bigpartition1/JKim_Test/test_bs_1/129c-тест-BIQ/IAPLTR1_Mm- ERVK-LTR_chr10: 104272652-104273004 _ +. Fasta: Нет такого файла или каталога ./my_shellscript.sh: строка 14: `$ i ': недействительный идентификатор

Может ли кто-нибудь здесь помочь мне определить, что я делаю неправильно, может быть, что мне нужно делать?

Заранее спасибо.

+0

Все ли эти папки находятся в одном каталоге или разбросаны по файловой системе? Расскажите, пожалуйста, о том, где находятся все папки. Пример: рекурсивно? Распространяться через разные каталоги? Или в том же каталоге? Вы можете использовать rename -n 's /: //' *, если все они находятся в одном каталоге. – venki421

+0

Все они находятся в одном и том же подкаталоге. Большое спасибо за ваш ответ. Я бы хотел их скопировать, а не переименовать, я бы просто изменил mv на cp? –

+0

Вы в порядке, меняя имена папок в Linux, а затем копируете в Windows? – venki421

ответ

3

Это уродство будет переименовать каталоги на месте:

find tmp -depth -type d -exec sh -c '[ -d "{}" ] && echo mv "{}" "$(echo "{}" | tr : _)"' \; 

Я использую -depth так она спускается вниз, в самые глубокие подкаталоги первого.
[ -d "{}" ] необходим, поскольку, как только подкаталог переименовывается, его родительский каталог (найденный поиском) может больше не существовать (переименованный).

Измените «echo mv» на «mv», если вы удовлетворены тем, что будете делать то, что хотите.

+0

+1. Я даже не был близок к строительству этой красоты, кроме части находки. – venki421

+0

Хех, я думаю, «чудовище» в глазах смотрящего! –

+0

+1 Для милого маленького монстра! –

Смежные вопросы