如何修复 cp 中的这个错误?

如何修复 cp 中的这个错误?
#!/bin/bash

SrcDir=$1
DstDir=$2

#If DstDir is not exist, this creats it
if ! [ -a $DstDir ]; then
   mkdir $DstDir
fi

#Formats 
Vformat=(mp4 avi 3gp mpeg mkv wmv mov)
Iformat=(jpg jpeg png)

Year(){
   ls -l --time-style=full-iso $1 | tr -s '[:blank:]' | cut -d' ' -f6 | cut -d'-' -f1 | sort -u
}
export -f Year

Finder(){
   find $SrcDir -iname "*.$File"
}

#Make Year of File
for File in ${Vformat[@]}
do
   Finder $File
done 2>/dev/null | xargs -I {} -r -n1 bash -c 'Year {}' | xargs -I {} -n1 mkdir -p $DstDir/{}/videos

for File in ${Vformat[@]}
do
   Finder $File
done 2>/dev/null | xargs -I {} -r -n1 bash -c 'cp -r {} ${DstDir}/$(Year {})/videos'




cp: cannot creat regular file '/2023/videos': No such file or dir

为什么不打印 ${DstDir}?我的程序将视频文件复制到一个文件夹中,并以它们上次更改的年份命名。year 函数返回文件上次更改的年份。那么为什么 cp 在脚本的最后一行会出错?

答案1

在 bash -c 'cp -r {} ${DstDir}/$(Year {})/videos' 中,$DstDir 由新的 bash shell 扩展 - 但(与 Year 函数不同)您没有将其导出 – steeldriver

我必须导出 $DstDir。很抱歉。我是新手。

相关内容