Добавить имя каждого каталога в файлы внутри соответствующего каталога в Linux - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть каталог, содержащий несколько каталогов.Вот пример списка каталогов:

  • dir1_out
  • dir2_out
  • dir3_out
  • dir4_out

Каждый каталог содержит несколько файлов.Например, folder1_out содержит следующие файлы:

  • file1
  • file2
  • file3

Аналогичным образом другие каталоги содержат несколько папок,Я хотел бы добавить имя каждого каталога к имени файла в соответствующем каталоге.Я хотел бы получить следующий результат в первом каталоге (dir1_out):

  dir1.file1
  dir1.file2
  dir1.file3

Поскольку у меня есть около 50 каталогов, я хотел бы написать цикл, который принимает имя каждого каталога и добавляет его кначало всех подфайлов.

У вас есть идеи, как я могу это сделать в Linux.

1 Ответ

0 голосов
/ 06 февраля 2019

Простой bash onliner, если файлов не слишком много:

for p in */*; do [ -f "$p" ] && mv -i "$p" "${p%/*}/${p/\//.}"; done

При этом используются расширения параметров для генерации новых имен файлов после проверки того, что мы пытаемся переименовать реальный файл - см. Страницу руководства bash.описания ${parameter%word} и ${parameter/pattern/string}

Если файлов может быть слишком много, чтобы безопасно развернуть их все в один список:

#!/bin/bash
find . -maxdepth 2 -print |\
while read p; do
    p="${p#./}"
    mv -i "$p" "${p%/*}/${p/\//.}"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...