У меня есть несколько каталогов, содержащих файл с таким же именем. Я хочу переместить эти файлы в другой каталог и в то же время переименовать их с именем каталога, чтобы они различались и не перезаписывались.
РЕДАКТИРОВАТЬ: Все каталоги находятся в одном каталоге. Пункт назначения - это один каталог в системе, который может быть любым. Мы читаем каталог и читаем файл из него, переименовываем его в точности как имя каталога и помещаем его в место назначения.
Важным ограничением является то, что дается имя файла, который будет во всех каталогах. Каталоги могут содержать и другие файлы, кроме того, который выдается
Большое спасибо
Предполагая, что имя файла этих файлов - thefilename
, вы cd
перешли в каталог, содержащий эти каталоги, и вы хотите переместить их в /path/to/dest
, следующий цикл оболочки должен помочь
for file in */thefilename; do
echo mv -iv "./$file" "/path/to/dest/${file%/*}"
done
Вы можете запустить это прямо в интерактивной оболочке или поместить в файл и запустить как скрипт.
Я добавил echo
, чтобы он печатал только команды mv. Если выходные данные выглядят корректно, удалите echo
и запустите его снова, чтобы он действительно сделал перемещение.
Если вы используете bash, вы можете сделать следующее:
$ for i in *WhatEverMatchesYourOriginalDirectories*
do
cd $i
for j in *
do
mv $j ../Target/${i}-${j}
done
cd ..
done
Это переместит каждый файл в каталогах, соответствующих первому шаблону, в целевой каталог.