我有很多文件,其名称如下:
index.php?dir=IOP%2FFOO%2FBAR%2F&file=ScanImage001.jpg
index.php?
将with Nothing替换%2F
为 ' /
'、dir=
noting 并file=
with Nothing后:
IOP/FOO/BAR/ScanImage001.jpg
现在我想将第一个文件重命名为第二个文件并创建目录。
我怎样才能做到这一点?
答案1
for i in *.jpg
do
b=$(echo $i | sed 's/.*dir=//' | sed 's/%2F/\//g' | sed 's/&file=//')
mkdir -p "$(dirname "$b")
mv "$i" "$b"
done
包含sed
调用的行存储文件名应获取的完整路径。
该mkdir
行创建包括中间目录的目录,并且如果它们已经存在则不会抱怨。
答案2
假设你把它放在一个变量中$url
short=$(echo $url | sed -e s,%2F,/,g -e s,^index[^=]*=,, -e s,.file=,,)
mkdir -p $(dirname $short)
mv $url $short
mkdir -p
将创建目录以及所有路径。$(dirname $short)
会给你 $short 的目录名部分(例如IOP/FOO/BAR
)
答案3
如果%2F
是文字字符串(不是控制字符)那么你可以尝试这个小脚本:
for file in index*.jpg; do
dir1=$(grep -Po '.*dir=\K[[:alnum:]]*' <(echo "$file"))
dir2=$(grep -Po '.*dir=[[:alnum:]]*%2F\K[[:alnum:]]*' <(echo "$file"))
dir3=$(grep -Po '.*dir=[[:alnum:]]*%2F[[:alnum:]]*%2F\K[[:alnum:]]*' <(echo "$file"))
filename=$(grep -Po '.*file=\K.*' <(echo index.php\?dir\=IOP%2FFOO%2FBAR%2F\&file\=ScanImage001.jpg))
echo mkdir -p $dir1/$dir2/$dir3 #remove echos
echo mv $file $dir1/$dir2/$dir3/$filename #at the beginning of the line
done
echo
如果您喜欢屏幕上看到的内容,请删除这两个命令。