2013-05-16 6 views
0

У меня есть два каталога, foo и bar. Оба содержат одинаковое количество файлов. Я хочу переименовать все файлы в foo так же, как файлы в баре. Значение первого файла в foo будет переименовано в то, что первый файл в строке, второй файл в foo, что второй в строке и т. Д.Переименуйте все файлы в каталоге в каталог другого каталога

Итак, чтобы быть понятным, следуя процессу переименования «ls/путь/to/foo "должен давать тот же результат, что и« ls/path/to/bar ». Хотя, конечно, фактическое содержание всех файлов в foo и bar не изменилось.

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

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

+0

вы можете разместить реж деревья. – kev

+2

Что вы пробовали? Мы не являемся службами написания кода, мы здесь, чтобы помочь вам исправить проблемы в вашем коде. – Barmar

+0

@kev Не похоже, что он хочет рекурсии, поэтому я не думаю, что это имеет значение. – Barmar

ответ

1

Поскольку вы используете bash, секрет заключается в осторожном использовании массивов (и двойные кавычки):

x=(/path/to/foo/*) 
y=(/path/to/bar/*) 

i=0 
while [ $i -lt ${#x[@]} ] 
do 
    base="${y[$i]##*/}" 
    mv "${x[$i]}" /path/to/foo/"$base" 
    ((i++)) 
done 
+0

Блестящий, отлично работает. –

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