Shell Script для переименования и перемещения файлов - PullRequest
2 голосов
/ 04 октября 2010

Я работаю над чем-то, и мне нужно решить следующее.Я даю аналогичную версию моей проблемы.

Скажем, у нас есть музыкальный каталог, в котором есть 200 каталогов, соответствующих различным фильмам.В каждом каталоге фильмов есть несколько музыкальных файлов.

Теперь, допустим, файл music.mp3 находится в папке movie.mp3.Я хочу сделать сценарий оболочки таким, чтобы он переименовал файл в movie_music.mp3 и поместил его в какую-то папку, о которой я упоминал.По сути, все файлы в подкаталогах должны быть переименованы и помещены в новый каталог.

Есть ли обходной путь для этого?

Ответы [ 3 ]

2 голосов
/ 04 октября 2010

Этот скрипт получает два аргумента: исходная папка и папка назначения. Он переместит каждый файл из любого каталога в исходном каталоге в новый каталог с новым именем файла:

#!/bin.sh
echo "Moving from $1 to $2"
for dir in "$1"/*; do
  if [ -d "$dir" ]; then
    for file in "$dir"/*; do
      if [ -f "$file" ]; then
        echo "${file} -> $2/`basename "$dir"`_`basename "${file}"`"
        mv "${file}" "$2"/`basename "$dir"`_`basename "${file}"`
      fi
    done
  fi
done

Вот образец:

bash move.sh dir dir2
Moving from dir to dir2
dir/d1/f1 -> dir2/d1_f1
dir/d1/f2 -> dir2/d1_f2
dir/d2/f1 -> dir2/d2_f1
dir/d2/f2 -> dir2/d2_f2
1 голос
/ 04 октября 2010

Bash:

newdir=path/to/new_directory;
find . -type d |while read d; do
  find "$d" -type f -maxdepth 1 |while read f; do
    movie="$(basename "$d" |sed 's/\(\..*\)\?//')"
    mv "$f" "$newdir/$movie_$(basename $f)";
  done;
done
0 голосов
/ 04 октября 2010

Предполагая следующее дерево каталогов:

./movie1:
movie1.mp3

./movie2:
movie2.mp3

Следующая однострочная команда создаст команды 'mv', которые вы можете использовать:

find ./ | grep "movie.*/" | awk '{print "mv "$1" "$1}' | sed 's/\(.*\)\//\1_/'

РЕДАКТИРОВАТЬ:

Если ваша структура каталогов содержит только соответствующие каталоги, вы можете развернуть ее, используя вместо этого следующий grep:

grep "\/.*\/.*"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...