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