Bash重命名扩展递归
发布时间:2020-12-15 18:45:09 所属栏目:安全 来源:网络整理
导读:我知道有很多这样的事情,但是他们不会递归地工作,或者他们是巨大的. 这就是我所得到的: find . -name "*.so" -exec mv {} `echo {} | sed s/.so/.dylib/` ; 当我运行查找部分它给我一个文件列表.当我运行sed部分时,它用.dylib替换任何.so.当我们一起运行时
我知道有很多这样的事情,但是他们不会递归地工作,或者他们是巨大的.
这就是我所得到的: find . -name "*.so" -exec mv {} `echo {} | sed s/.so/.dylib/` ; 当我运行查找部分它给我一个文件列表.当我运行sed部分时,它用.dylib替换任何.so.当我们一起运行时,他们不工作. 我用回声替换了mv,看看发生了什么: ./AI/Interfaces/C/0.1/libAIInterface.so ./AI/Interfaces/C/0.1/libAIInterface.so 没有什么被替换!
这将正确地做到:
find -L . -type f -name "*.so" -print0 | while IFS= read -r -d '' FNAME; do mv -- "$FNAME" "${FNAME%.so}.dylib" done 正确地,我们的意思是: 1)它将重命名文件扩展名(由于使用${FNAME%.so} .dylib).使用${X / .so / .dylib}的所有其他解决方案都是不正确的,因为它们在文件名中错误地重命名了.so的第一次出现(egxso.so更名为x.dylib.so,或更糟的是,./libraries /libTemp.so-1.9.3/libTemp.so被重命名为./libraries/libTemp.dylib-1.9.3/libTemp.so – 一个错误). 2)它将处理文件名中的空格和任何其他特殊字符(双引号除外). 3)不会更改目录或其他特殊文件. 4)它将跟随到目标文件的子目录和链接的符号链接,并重命名目标文件,而不是链接本身(查找的默认行为是处理符号链接本身,而不是链接指向的文件). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |