Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我一直试图用iconv递归重命名文件文件夹,但没有成功,文件被正确重命名但文件夹没有. 我用于文件的是(完美的): find . -name * -depth \ -exec bash -c 'mv "$1" "${1%/*}/$(iconv -f UTF8 -t ASCII//TRANSLIT <<< ${1##*/})"' -- {} \; 我尝试过的文件和文件夹(失败:只重命名文件夹): 我一直试图用iconv递归重命名文件和文件夹,但没有成功,文件被正确重命名但文件夹没有.

我用于文件的是(完美的):

find . -name * -depth \ -exec bash -c 'mv "" "${1%/*}/$(iconv -f UTF8 -t ASCII//TRANSliT <<< ${1##*/})"' -- {} \;

我尝试过的文件和文件夹(失败:只重命名文件夹):

find . -exec bash -c 'mv "" "$(iconv -f UTF8 -t ASCII//TRANSliT <<< )"' -- {} \;

原始问题:
我只想批量重命名大量文件,使它们“网络友好”,想像删除空格,奇怪的字符等等,目前我有

find . -name '*' -depth \| while read f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr -s ' ' _|tr -d "'"|tr -d ","|tr - _|tr "&" "y"|tr "@" "a")" ;done

有什么办法可以在上面运行上面的tr和一次运行的iconv吗?因为我正在谈论300,000个文件要重命名,我想尽可能避免第二次搜索.

如果需要,我正在使用Bash 4.2.24

提前致谢.

解决方法 我认为以下内容可以在一次通过中完成您想要的一切.

# Update: if this doesn't work,use read -d '' insteadfind . -print0 | while IFS= read -d '$[+++]0' f ;do   orig_f="$f"  # Below is pure bash. You can replace with tr if you like  # f="$( echo $f | tr -d,\' | tr "$'&'@- " "ya__" )"  f="${f// /_}"  # Replace spaces with _  f="${f//\'}"   # Remove single quote  f="${f//-/_}"  # Replace - with _  f="${f//,}"    # Remove commas  f="${f//&/y}"  # Replace ampersand with y  f="${f//@/a}"  # Replace at sign with a  f=$( iconv -f UTF8 -t ASCII//TRANSliT <<< "$f" )  new_dir="$(dirname $f)"  new_f="$(basename $f)"  mkdir -p "$new_dir"  mv -i "$orig_f" "$new_dir/$new_f"done

find命令(不需要实际选项,除了-print0来处理带空格的文件名)将向while循环发送空分隔文件名(毫无疑问,有人会在那里纠正我的错误).利用参数扩展的一长串分配删除/替换各种字符;我将使用tr作为注释的等效管道包含在内.然后我们通过iconv运行文件名来处理字符集问题.最后,我们将名称拆分为其路径和文件名组件,因为我们可能必须在执行mv之前创建一个新目录.

总结

以上是内存溢出为你收集整理的linux – 如何使用来自Bash的iconv递归重命名文件和文件夹全部内容,希望文章能够帮你解决linux – 如何使用来自Bash的iconv递归重命名文件和文件夹所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
linux – 如何使用来自Bash的iconv递归重命名文件和文件夹_系统运维_内存溢出

linux – 如何使用来自Bash的iconv递归重命名文件和文件夹

linux – 如何使用来自Bash的iconv递归重命名文件和文件夹,第1张

概述我一直试图用iconv递归重命名文件文件夹,但没有成功,文件被正确重命名但文件夹没有. 我用于文件的是(完美的): find . -name * -depth \ -exec bash -c 'mv "$1" "${1%/*}/$(iconv -f UTF8 -t ASCII//TRANSLIT <<< ${1##*/})"' -- {} \; 我尝试过的文件和文件夹(失败:只重命名文件夹): 我一直试图用iconv递归重命名文件和文件夹,但没有成功,文件被正确重命名但文件夹没有.

我用于文件的是(完美的):

find . -name * -depth \ -exec bash -c 'mv "" "${1%/*}/$(iconv -f UTF8 -t ASCII//TRANSliT <<< ${1##*/})"' -- {} \;

我尝试过的文件和文件夹(失败:只重命名文件夹):

find . -exec bash -c 'mv "" "$(iconv -f UTF8 -t ASCII//TRANSliT <<< )"' -- {} \;

原始问题:
我只想批量重命名大量文件,使它们“网络友好”,想像删除空格,奇怪的字符等等,目前我有

find . -name '*' -depth \| while read f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr -s ' ' _|tr -d "'"|tr -d ","|tr - _|tr "&" "y"|tr "@" "a")" ;done

有什么办法可以在上面运行上面的tr和一次运行的iconv吗?因为我正在谈论300,000个文件要重命名,我想尽可能避免第二次搜索.

如果需要,我正在使用Bash 4.2.24

提前致谢.

解决方法 我认为以下内容可以在一次通过中完成您想要的一切.

# Update: if this doesn't work,use read -d '' insteadfind . -print0 | while IFS= read -d '$0' f ;do   orig_f="$f"  # Below is pure bash. You can replace with tr if you like  # f="$( echo $f | tr -d,\' | tr "$'&'@- " "ya__" )"  f="${f// /_}"  # Replace spaces with _  f="${f//\'}"   # Remove single quote  f="${f//-/_}"  # Replace - with _  f="${f//,}"    # Remove commas  f="${f//&/y}"  # Replace ampersand with y  f="${f//@/a}"  # Replace at sign with a  f=$( iconv -f UTF8 -t ASCII//TRANSliT <<< "$f" )  new_dir="$(dirname $f)"  new_f="$(basename $f)"  mkdir -p "$new_dir"  mv -i "$orig_f" "$new_dir/$new_f"done

find命令(不需要实际选项,除了-print0来处理带空格的文件名)将向while循环发送空分隔文件名(毫无疑问,有人会在那里纠正我的错误).利用参数扩展的一长串分配删除/替换各种字符;我将使用tr作为注释的等效管道包含在内.然后我们通过iconv运行文件名来处理字符集问题.最后,我们将名称拆分为其路径和文件名组件,因为我们可能必须在执行mv之前创建一个新目录.

总结

以上是内存溢出为你收集整理的linux – 如何使用来自Bash的iconv递归重命名文件和文件夹全部内容,希望文章能够帮你解决linux – 如何使用来自Bash的iconv递归重命名文件和文件夹所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1017523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存