我正在寻找处理本质上执行的最佳方法Unix2Dos具有特定扩展名的所有文件.nux
。
我实际上想将扩展名重命名为.nun
.
现在,我的代码手动推送到每个硬编码目录中以实现此目的,但我认为/希望有一种更干净的方法来实现此目的。可以递归地深入到下面的每个文件夹/testpath/temp/
并将文件“重命名”.nux
为.nun
并将 Linux 行结尾更改为 Windows 行结尾的代码。
BASH 版本 3.2.57(2)-发布
pushd /testpath/temp/xyz
if [[ -f PRXYZ.NUX ]]
then
sed 's/$/\r/' PRXYZ.NUX > PRXYZ.NUN
rm PRXYZ.NUX
fi
popd
pushd /testpath/temp/abc
if [[ -f PRABC.NUX ]]
then
sed 's/$/\r/' PRABC.NUX > PRABC.NUN
rm PRABC.NUX
fi
popd
pushd /testpath/temp/lmn
if [[ -f PRLMN.NUX ]]
then
sed 's/$/\r/' PRLMN.NUX > PRLMN.NUN
rm PRLMN.NUX
fi
popd
答案1
对于换行符转换,有dos2unix
包,在 Linux 系统上可用,providinf unix2dos
,您可以使用它来转换文件,而不是使用sed
:
-ascii
仅转换换行符。这是默认的转换模式。
和
-l, --newline
添加额外的换行符。DOS2UNIX:仅将 DOS 换行符更改为两个 Unix 换行符。在 Mac 模式下,只有 Mac 换行符更改为两个 Unix 换行符。
UNIX2DOS:仅 Unix 换行符更改为两个 DOS 换行符。在 Mac 模式下,Unix 换行符更改为两个 Mac 换行符。
而且,根据 Panki 的评论,您可以用来find
抓取文件,重命名它们并转换:
find /testpath/temp/ -type f -name "*.NUX" \
-exec sh -c 'unix2dos "$1"; mv "$1" "${1%.NUX}.NUN"' _ {} \;