我可能在我的脑海里。我正在尝试创建一个bash脚本,用于识别以5位数字开头的文件,检查该匹配文件(或文件组)是否存在目录并将文件移动到目录中。如果该目录不存在,我想创建它,然后移动这些文件。比较数组和创建目录
这是我到目前为止的剧本,但实际上它并不遥远。
476B Oct 19 14:43 .
544B Oct 21 10:36 ..
68B Sep 17 08:14 12345/
68B Sep 17 08:14 12735/
0B Sep 17 08:14 29375.pdf
0B Sep 17 08:14 29375a.pdf
0B Sep 17 08:14 29375-1.pdf
0B Sep 17 08:14 32952.pdf
0B Sep 17 08:14 39472.pdf
68B Sep 17 08:14 59723/
0B Sep 17 08:14 97132.pdf
273B Oct 19 14:43 sort.sh
所以打算关闭这个例子,我想找出开头的文件29375,并建立一个目录,对他们来说:一个目录,需要进行排序应该是这样的
#!/bin/bash
files=($(find . -type f | grep -E "[0-9]{5}" -o))
directories=($(find . -type d))
for i in ${files[*]}
do
printf "▸ ▸ pdf file found: %s\n" $i
done
for d in ${directories[*]}
do
printf "▸ ▸ directory found: %s\n" $d
done
NewDir=(`echo ${files[@]} ${directories[@]} | tr ' ' '\n' | sort | uniq -u `)
for nd in ${NewDir[*]}
do
printf "mkdir for: %s\n" $nd
done
例,然后将它们移动到该目录中。
这是我遇到麻烦的地方,比较找到的文件和存在的目录。 NewDir数组是我在尝试搜索此解决方案时进行的一项测试。
感谢提供反馈/帮助。
谢谢你找到的第一个
find
它只会工作。试图找出sed在做什么,但除此之外,脚本做的事情很奇怪。单独测试find命令会产生正确的结果。但是,当if语句检查$ dir时,它会使用整个文件名(带扩展名),而不是find命令的结果。添加一些printf进行调试,发生这种情况: 找到文件:./11111-1.jpg 检查目录是否存在... 找不到目录。制作:.11111-1.jpg mkdir:./11111-1.jpg:文件存在 目录是否存在?....是。 so..if [! -d $ dir]正在寻找目录? – Martin管道中的'sed'命令完全可以避免这种情况。你确定你没有错过任何东西吗?它的功能是(每个输入行):捕获5个数字后面的'。/'并输出该捕获。 –