我的代码有效,但不是我想要的。基本上,我的代码所做的是通过当前目录查找,搜索文件夹,并在这些文件夹中查看这些文件。如果其中一个文件扩展名是$ Example变量的值,那么它应该删除具有相同起始文件名的所有其他文件,而不考虑扩展名,并将带有$ Example扩展名的扩展名重命名为相同名称,而不使用$示例扩展。下面是代码:保持* nix格式
#!/bin/sh
set -o errexit
Example=dummy
for d in *; do
if test "$(ls -A "$d" 2>/dev/null)"; then
if [ $(ls -1 ${d}/*.$Example 2>/dev/null | wc -l) -ge 1 ]; then
cd $(pwd)/$d;
for f in *.$Example; do
fileName="${f%.$Example}";
mv "$f" "${f%.$Example}";
#tr "\r" "\n" < "${f%.$Example}" > "${f%.$Example}"
listToDelete=$(find -name "$fileName.*");
for g in $listToDelete; do
rm $g;
done;
done;
cd ..;
fi;
fi;
done
使用VIM中已创建的文件,所以应该有Linux的格式,而不要使用Windows的格式化。由于某些原因,一旦扩展名已被删除,使用此代码,它将被格式化为\r
,并且文件无法运行。我在临时解决方案所在的位置添加了注释,但我想知道是否有某种方法可以改变保留Linux格式的功能,或者可能有另一种方法来实现我想要的功能。由于
'mv'不应该改变文件内容,不管你怎么称呼它。 –
你如何检查该文件是否有'\ r'而不是'\ n'? –
我无法在我的系统上重现此问题,我相信您的问题存在于别处。 –