перемещение файлов в разные каталоги - PullRequest
1 голос
/ 11 декабря 2011

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

Это то, что у меня было до сих пор, поправьте меня, где я ошибаюсь, и помогите изменить мой сценарий:

#!/bin/bash
From=/home/katy/doc
To=/home/katy/mo #directory where the media files will go
WA=/home/katy/do # directory where the other files will go
 if [ ! -d "$To" ]; then
   mkdir -p "$To"
 fi
cd $From
find path -type f -name"*.mp4" -exec mv {} $To \;

Ответы [ 3 ]

1 голос
/ 11 декабря 2011

Я бы решил это примерно так:

#!/bin/bash
From=/home/katy/doc
To=/home/katy/mo # directory where the media files will go
WA=/home/katy/do # directory where the other files will go

cd "$From"
find . -type f \
| while read file; do
    dir="$(dirname "$file")"
    base="$(basename "$file")"
    if [[ "$file" =~ \.mp4$ ]]; then
      target="$To"
    else
      target="$WA"
    fi
    mkdir -p "$target/$dir"
    mv -i "$file" "$target/$dir/$base"
  done

Примечания:

  • mkdir -p не будет жаловаться, если каталог уже существует, поэтому проверять это не нужно.
  • Поставьте двойные кавычки вокруг всех имен файлов, если они содержат пробелы.
  • Передавая вывод find в цикл while, вы также избежите укусов пробелами, потому что read будет читать до новой строки.
  • Вы можете изменить регулярное выражение в соответствии со вкусом, например, \.(mp3|mp4|wma|ogg)$.
  • В случае, если вы не знали, $(...) запустит данную команду и вернет ее результат вместо $(...) (называемого подстановка команд ). Это почти то же самое, что и `...`, но немного лучше ( детали ).
  • Чтобы проверить это, поставьте echo перед mv. (Обратите внимание, что кавычки исчезнут с вывода.)
1 голос
/ 11 декабря 2011
cd $From
find . -type f -name "*.mp4" -exec mv {} $To \;
    ^^^

или

find $From -type f -name "*.mp4" -exec mv {} $To \;
     ^^^^^
0 голосов
/ 11 декабря 2011
cd $From  
mv *.mp4 $To;  
mv * $WA;
...