2009-07-03 3 views
2

У меня есть набор файлов в одном каталоге с именем:Дубликаты файлов с похожими именами файлов в UNIX

OneThing-x.extension 
OneThing-y.extension 
OneThing-z.extension 

Какая команда UNIX (найти, ср, xargs, СЭД?) Я могу использовать, чтобы скопировать их в

AnotherThing-x.extension 
AnotherThing-y.extension 
AnotherThing-z.extension 

, что х -> копирования,> х и у -> копия -> у

у меня есть найти .. часть команды, чтобы начать с, который выбирает файлы, но я там застрял.

EDIT Очевидно, что я хочу, чтобы сохранить как оригинал и копия, поэтому переименование не совсем сделать трюк для меня.

ответ

3

Как насчет:

$ touch a1.a a2.a a3.a 
$ ls 

a1.a a2.a a3.a 

$ for a in a*.a ; do cp $a $(echo $a | sed 's/^a/b/') ; done 
$ ls 

a1.a a2.a a3.a b1.a b2.a b3.a 
+0

Самое короткое и самое элегантное решение. И он работал как шарм! –

+2

Регулярная cantrip в моем ящике инструментов (хотя я достаточно взрослый, чтобы по умолчанию возвращать). Иногда с поиском, чтобы получить список ввода. Вещь, на которую следует обратить внимание, - это уникальность в регулярном выражении замены. Безопаснее всего использовать его с echo вместо cp в первый раз. – dmckee

+0

Введите ваши переменные оболочки, если вы когда-либо использовали такие скрипты с именами файлов (или именами каталогов), которые содержат пробелы. (Мы не будем говорить о именах файлов, начинающихся с «-», потому что они просто злые.) – ijw

1

Мой грубый решение было бы что-то вроде:

for FIL in OneThing*; do NFIL=`echo $FIL|sed 's/OneThing/AnotherThing/'`; cp "$FIL" "$NFIL"; done; 
1

Расширение Jason Musgrove's solution:

for FIL in OneThing* 
do 
    NFIL=`echo $FIL | sed 's/OneThing/AnotherThing/'` 
    cp "$FIL" "$NFIL" 
done 
+0

Дуглас: К сожалению, да - я пропустил трубопровод эхо $ FIL в СЭД. Хороший улов. –

0
$ rename 's/OneThing/AnotherThing/' *.extension 
+0

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

0

Вы можете также использовать MMV:

$ mmv -c "OneThing*" "AnotherThing#1" 

или

$ mmv -c "OneThing-*.extension" "AnotherThing-#1.extension" 
+0

$ mmv -bash: mmv: команда не найдена –

+0

«apt-get install mmv» решит это, если вы используете дистрибутив, основанный на debian. Я уверен, что дистрибутивы баз RPM предоставляют аналогичный пакет. –

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