我几乎没有us-ascii编码的文件。我想递归地将它们转换为utf-8。
若要查找我使用的命令中的文件,请执行以下命令
find . -name "*.adoc" -type f -exec file --mime-encoding {} \; | grep -v ": us-ascii"输出看起来就像
./sds.adoc: us-ascii
./docker/misc/terms.adoc: us-ascii
./docker/misc/tools.adoc: us-ascii
./docker/basics-containers.adoc: us-ascii
./web-scraping/links.adoc: us-ascii
./system-design/reference-architecture.adoc: us-ascii
./system-design/replication vs load balancing.adoc: us-ascii
./system-design/performance.adoc: us-ascii
./system-design/links.adoc: us-ascii
./system-design/disaster-recovery.adoc: us-ascii要转换,我想,我必须使用iconv -f us-ascii file.adoc -t UTF-8 -o file.adoc
我不知道该怎么做。
发布于 2021-12-07 06:08:33
试着做这样的事情:
find . -name '*.adoc' -type f -execdir sh -c '
for f; do
file --mime-encoding "$f" | grep -qi us-ascii &&
bn="$(basename "$f" .adoc)" &&
iconv -f us-ascii "$f" -t UTF-8 -o "$bn-utf8.adoc"
done' sh {} +这将将cd放入每个包含.adoc文件的目录中(对于该目录中的每个.adoc文件),如果file指示文件为use,则使用iconv将其转换为utf-8 (具有不同的输出文件名)。
注意:-execdir选项是非标准的,需要find的GNU或BSD版本。GNU是Linux上的标准。
如果要用utf-8版本替换原来的us-ascii文件,请将&&添加到iconv行的末尾,并在其后面添加以下行:
mv "$bn-utf8.adoc" "$f"https://unix.stackexchange.com/questions/680449
复制相似问题