Переименование каталогов третьего уровня в одно и то же имя

Попробуйте это:

for i in `cat file.txt`
do
        File=`echo $i | awk -F '~' '{print "Src_"$5".txt"}'`
        echo "$i" >> $File
done
  • передать содержимое file.txtпострочно в цикл for.
  • извлеките 5-е поле и Src_в качестве префикса и .txtв качестве суффикса, чтобы объявить его как имя файла
  • затем передайте содержимое в файл.
0
16.06.2021, 13:23
1 ответ

Возможно, это и лучше, но:

Использование bashиfind

while IFS= read -r dir; do
    mv -- "$dir" "${dir%/*}/X"
done< <(find. -maxdepth 2 -mindepth 2 -type d)

Сначала выполните пробный запуск с чем-то вроде:

while IFS= read -r dir; do
    printf 'mv "%s" "%s"\n' "$dir" "${dir%/*}/X"
done< <(find. -maxdepth 2 -mindepth 2 -type d)

Короче:

  • find
    • .текущий каталог как базовый (Обычно Aв вашем случае)
    • type d(каталог )с минимальной и максимальной глубиной 2
  • bashпрочитать $dirиз findи переместить $dirв
    • ${dir%/*}удалить последний /и все, что там после
      • /Xдобавить новое имя каталога.

Используйте, например, find./A..., если вы проживаете на один уровень ниже А и т. д.

При необходимости добавьте -vкmv(не -POSIX ), чтобы показать предпринятые действия.

0
28.07.2021, 11:24

Теги

Похожие вопросы