将文件移动到不同的目录

时间:2011-12-11 06:55:57

标签: linux bash unix ubuntu

我正在尝试将指定目录中的媒体和其他文件移动到另一个目录,如果没有退出(文件将在哪里),则创建另一个文件,并创建一个目录,其余文件将具有不同的扩展名走。我的第一个问题是我的脚本没有创建一个新目录,它没有将文件移动到其他目录,我可以用什么代码将具有不同扩展名的文件移动到一个目录?

这是我到目前为止所做的,纠正我错在哪里并帮助修改我的脚本:

#!/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 个答案:

答案 0 :(得分:1)

cd $From
find . -type f -name "*.mp4" -exec mv {} $To \;
    ^^^

find $From -type f -name "*.mp4" -exec mv {} $To \;
     ^^^^^

答案 1 :(得分:1)

我有点像这样解决:

#!/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)$
  • 如果您不知道,$(...)将运行给定的命令并将其输出粘贴回$(...)(称为命令替换)。它与`...`几乎相同,但稍微好一些(details)。
  • 要对其进行测试,请将echo放在mv前面。 (请注意,引号将在输出中消失。)

答案 2 :(得分:0)

cd $From  
mv *.mp4 $To;  
mv * $WA;