Bash 根据文件名的某些部分将文件移动到目录?
我有几千本电子书,名字像Bash 根据文件名的某些部分将文件移动到目录?,bash,filenames,move,Bash,Filenames,Move,我有几千本电子书,名字像AuthorFirstName AuthorLastName Title XX.pdf,其中XX是1-99中的数字(卷号) Author Tilt名称可以是多个单词,因此这里我想将文件复制到名为AuthorFirstName AuthorLastName title的文件夹中。除了数字以外的所有内容都应该是文件夹名,这样电子书的所有卷都可以放在同一个文件夹中 比如说 root.....>AuthorFirstName AuthorLastName Title>
AuthorFirstName AuthorLastName Title XX.pdf
,其中XX
是1-99
中的数字(卷号)
Author Tilt名称可以是多个单词,因此这里我想将文件复制到名为AuthorFirstName AuthorLastName title
的文件夹中。除了数字以外的所有内容都应该是文件夹名,这样电子书的所有卷都可以放在同一个文件夹中
比如说
root.....>AuthorFirstName AuthorLastName Title>AuthorFirstName AuthorLastName Title XX.pdf
对于任务,您可以混合使用
find
、sed
和bash
脚本。不过,你必须自己写,如果失败了,还得寻求帮助
您还可以尝试一些用于批量移动/重命名的现成工具,如下所示:
但从未使用过这些工具。我会尝试使用以下工具:
for folder in $(ls | sed -r "s/(.*) ([0-9]{1,2})/\1/" | uniq)
do
mkdir $folder
mv $(find . -name "$folder*") $folder
done
我不知道这是否正确,但它可能会给你一些提示
编辑:将uniq添加到管道。使用循环,如下所示:
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