我有一个文件夹“model”,文件名为:
a_EmployeeData
a_TableData
b_TestData
b_TestModel
我基本上需要删除下划线并制作它们:
aEmployeeData
aTableData
bTestData
bTestModel
在Unix命令行中有没有这样做?
答案 0 :(得分:4)
这将正确处理包含奇数字符(如空格或甚至换行符)的文件,并且应该适用于仅基于POSIX语法的任何Unix / Linux发行版。
find model -type f -name "*_*" -exec sh -c 'd=$(dirname "$1"); mv "$1" "$d/$(basename "$1" | tr -d _)"' sh {} \;
这是它的作用:
对于在模型目录及其子目录下名称中包含下划线的每个文件(不是目录),将所有下划线都删除后重命名该文件。
答案 1 :(得分:3)
您只需使用bash
即可完成此操作。
for file in /path/to/model/*; do
mv "$file" "${file/_/}"
done
如果您有rename
命令,那么只需执行
rename 's/_//' /path/to/model/*
答案 2 :(得分:2)
for f in model/* ; do mv "$f" `echo "$f" | sed 's/_//g'` ; done
编辑:感谢其他人的建议修改了一些内容,但我担心我的代码对于奇怪的文件名仍然不好。
答案 3 :(得分:1)
也许这个:
find model -name "*_*" -type f -maxdepth 1 -print | sed -e 'p;s/_//g' | xargs -n2 echo mv
分解:
plain files
中包含至少一个下划线的所有model
,并且不搜索子目录sed
生成文件名调整 - 将_
替换为xargs
将mv
以上是干运行。如果满意,请删除echo
之前的mv
以进行实际重命名。
警告:如果filename包含空格,则无效。如果你有GNU sed
,你可以
find . -name "*_*" -maxdepth 1 -print0 | sed -z 'p;s/_//g' | xargs -0 -n2 echo mv
并且可以使用带空格的文件名...
答案 4 :(得分:1)
在zsh中:
autoload zmv # in ~/.zshrc
cd model && zmv '(**/)(*)' '$1${2//_}'
答案 5 :(得分:0)
marc@panic:~$ echo 'a_EmployeeData' | tr -d '_'
aEmployeeData
答案 6 :(得分:0)
我的机器上遇到了同样的问题,但文件名有多个下划线。我将rename
与g
选项一起使用,以便删除所有下划线:
find model/ -maxdepth 1 -type f | rename 's/_//g'
或者如果没有子目录,只需
rename 's/_//g'
如果您没有rename
,请参阅Jaypal Singh's answer。