Bash中如何获取含空格路径下最大尺寸MKV文件的完整路径?
解决带空格路径下获取最大MKV文件路径的问题
你的脚本问题出在cut -d ' ' -f2的使用上:当文件路径包含空格时,cut会把每个空格都当作分隔符,导致只能提取到路径中第一个空格前的部分。另外脚本里的$folder="$1"多了个多余的$,应该修正为folder="$1"。
下面提供两种可靠的解决方法:
方法一:用awk替代cut提取完整路径
利用awk删除开头的文件大小部分,保留剩余的完整路径(无论路径包含多少空格):
folder="$1" m2ts=$(find "$folder" -type f -iname "*.mkv" -printf '%s %p\n' | sort -nr | head -1 | awk '{sub(/^[0-9]+ /, ""); print}') echo "$m2ts"
awk的sub(/^[0-9]+ /, "")会匹配开头的数字(文件大小)加空格,将其替换为空,剩下的就是完整的路径。最后echo时要给变量加双引号,避免路径空格被拆分。
方法二:用空字符作为分隔符(更安全)
因为Linux文件路径中不可能包含空字符,所以用\0作为分隔符处理带特殊字符的路径最稳妥,需要配合支持空字符的工具选项(-z):
folder="$1" m2ts=$(find "$folder" -type f -iname "*.mkv" -printf '%s\0%p\0' | sort -z -nr | head -z -n1 | xargs -0 -n2 | awk '{print $2}') echo "$m2ts"
find用%s\0%p\0输出文件大小和路径,用空字符分隔sort -z和head -z处理空字符分隔的内容xargs -0 -n2将内容按每两个元素(大小+路径)分组- 最后用awk提取路径部分
内容的提问来源于stack exchange,提问作者Snake Eyes
相关产品推荐
相关产品推荐

