我有一个包含如下文件的目录:
PropertyNameRevCount.pdf
PropertyNameRevWordcloud.pdf
PropertyNameRevComments.pdf
我正在尝试将它们移动到当前目录的子目录中,名称为:
PropertyName
我已经创建了目录,并且有数百个文件需要移动。我正在寻找一个 bash 脚本来帮助自动化该过程。到目前为止,我有这个:
For f in *.pdf
我只是不知道如何仅让文件名的第一部分作为移动的条件。
答案1
这是一个简单的循环:
for FILE in PropertyName*.pdf
do
mv $FILE PropertyName
done
一个更复杂的例子,假设我有一个有效的 PropertyNames 列表和一个有效的“SecondParts”列表
for FILE in {PropertyName1,PropertyName2,PropertyName3}*.pdf
do if [ -e $FILE ]
then
DIR=`echo $FILE|sed -E -e 's/(Rev|TALi).pdf$//'`
mv $FILE $DIR
fi
done
答案2
您可以使用cut
分隔符(例如下划线)来拆分字符串
fname="applebox_businesstruck.pdf"
firstpart=$(cut -d_ -f1 <<< "$fname")
echo $firstpart
applebox
答案3
以下是我对您的问题的理解以及解决方案
您当前的目录树如下
|-- AnotherProp
|-- AnotherProptell.pdf
|-- AnotherProptest.pdf
|-- AnotherProptouch.pdf
|-- PropName
|-- PropNametell.pdf
|-- PropNametest.pdf
`-- PropNametouch.pdf
您想根据文件名的第一部分将 pdf 文件移动到适当的子目录吗?
BASH 脚本如下(移动我的文件) -
#!/bin/bash
#Read all the subdirectory names in your current directory
subdirs=( $(find . -mindepth 1 -maxdepth 1 -type d -printf "%P\n" ))
# Loop1 - Read all the files
for file in *.pdf
do
#Loop2 - Match filename with subdirectory
for mydir in ${subdirs[@]}
do
[[ ${file} =~ ^$mydir.* ]] && echo "move $file to $mydir"
done
done
示例输出为 -
move AnotherProptell.pdf to AnotherProp
move AnotherProptest.pdf to AnotherProp
move AnotherProptouch.pdf to AnotherProp
move PropNametell.pdf to PropName
move PropNametest.pdf to PropName
move PropNametouch.pdf to PropName
在Loop2中,可以根据您的需要用函数或mv命令替换echo语句。
希望这可以帮助。