Answers:
尝试这个:
$ find TopFolder -print
Topfolder
Topfolder/Folder1
Topfolder/Folder1/Folder11.ext
Topfolder/Folder1/Folder11.ext/Folder111
Topfolder/Folder2.ext
$ find TopFolder -name '*.ext' -print | while read i; do mv -v "$i" "${i%.ext}";done
$ find TopFolder
TopFolder
TopFolder/Folder1
TopFolder/Folder1/Folder11
TopFolder/Folder1/Folder11/Folder111
TopFolder/Folder2
第一个和最后一个查找只是为了显示前后层次结构。以下是中间人找到的,即实际工作的人:
$ find TopFolder -name '*.ext' -print
这会找到匹配模式的TopFolder中的所有内容'*.ext'
,即以.ext结尾的所有文件和目录,并打印每个文件的路径。如果要将其限制为仅限目录,请添加-type d
。
while read i; do
read i
从标准输入读取到shell变量i
。while
循环,直到read i
返回false,它在文件结束时返回。正在find
输出的是输出,read
标准输入是输出find
,所以read
从find
输出一次读取一行直到没有剩下。
mv -v "$i" "${i%.ext}"
这实际上是重命名。的-v
是在那里只是让你可以看到发生了什么,你可以,如果你想离开它。"$i"
是来源,如果路径中的任何元素$i
包含空格,则引用。"${i%.ext}"
是目的地,删除$i
任何尾随.ext
。
done
这只是终止while循环。
请注意,这是在bash中,它应该在其他相当现代的shell中可行,但语法可能有点不同。
您可以使用查找内联脚本和参数扩展。
find . -type d -name '*.ext' -exec ksh -c 'for dir
do mv "$dir" "${dir%.*}"
done' _ {} +