根据文件名的某些部分将文件移动到目录?

时间:2013-04-03 08:51:13

标签: bash filenames move

我有几千个名为AuthorFirstName AuthorLastName Title XX.pdf的电子书,其中xx是来自1-99的数字(卷号)。

作者倾斜名称可以是多个单词,所以在这里我想将文件复制到名为AuthorFirstName AuthorLastName title的文件夹。除了数字之外的所有内容都应该是文件夹名称,以便电子书的所有卷都在同一个文件夹中。

例如

root.....>AuthorFirstName AuthorLastName Title>AuthorFirstName AuthorLastName Title XX.pdf

3 个答案:

答案 0 :(得分:1)

您可以混合使用findsedbash脚本来完成任务。你必须自己编写,如果失败则请求帮助。

你也可以尝试一些现成的工具来进行大规模移动/重命名:http://tldp.org/LDP/GNU-Linux-Tools-Summary/html/mass-rename.html 从来没有使用其中一种。

答案 1 :(得分:1)

我会尝试这个:

for folder in $(ls | sed -r "s/(.*) ([0-9]{1,2})/\1/" | uniq)
do 
    mkdir $folder
    mv $(find . -name "$folder*") $folder
done    

我不知道这是否正确,但它可能会给你一些提示。

编辑:将uniq添加到管道中。

答案 2 :(得分:0)

使用如下所示的循环:

find . -type f -name "*pdf" -print0 | while IFS= read -d '' file
do
    # extract the name of the directory to create
    dirName="${file% *}"

    # create the directory if it doesn't exist
    [[ ! -d "$dirName" ]] && mkdir "$dirName"

    mv "$file" "$dirName"
done