【发布时间】:2018-05-01 16:09:33
【问题描述】:
我有以下命令运行到小写文件/目录,替换 .使用 _ 和其他各种操作。它的问题是它似乎首先尝试重命名目录,然后找不到它下面的文件。有没有办法先重命名目录中的所有文件,然后递归地重命名目录本身?例如
- 目录1
- 文件1
- 文件2
- 目录1
- 文件1
- 文件2
- 目录2
- 文件1
- 目录2
- 文件1
- 文件2
我的代码是
while IFS= read -rd '' entry; do
entry="${entry#./}" # strip ./
if [[ -d $entry ]]; then
rename 'y/A-Z/a-z/; s/ /_/g; s/_-_/-/g; s/sometext//g; s/_extras/-extras/g' "$entry"
else
rename 'y/A-Z/a-z/; s/\.(?=.*\.)/_/g; s/ /_/g; s/_-_/-/g; s/sometext//g; s/_extras/-extras/g' "$entry"
fi
done < <(find . -iname '*' -print0)
【问题讨论】:
-
您需要使用递归来一次性实现,或者先重命名文件然后再重命名目录
-
我会使用
find创建一个列表,并根据目录/文件深度对其进行自下而上的排序。
标签: linux rename file-rename