3

我有一个文件夹“模型”,其中包含如下文件:

a_EmployeeData
a_TableData
b_TestData
b_TestModel

我基本上需要删除下划线并制作它们:

aEmployeeData
aTableData
bTestData
bTestModel

Unix命令行中有没有这样做?

4

7 回答 7

5

这将正确处理包含奇怪字符(如空格甚至换行符)的文件,并且应该适用于任何仅基于 POSIX 语法的 Unix / Linux 发行版。

find model -type f -name "*_*" -exec sh -c 'd=$(dirname "$1"); mv "$1" "$d/$(basename "$1" | tr -d _)"' sh {} \;

这是它的作用:

对于模型目录及其子目录下名称中包含下划线的每个文件(不是目录),在删除所有下划线的情况下重命名文件。

于 2013-06-24T21:41:45.447 回答
5

您可以简单地使用bash.

for file in /path/to/model/*; do
mv "$file" "${file/_/}"
done

如果您有rename可用的命令,那么只需执行

rename 's/_//' /path/to/model/*
于 2013-06-24T21:54:25.770 回答
2
for f in model/* ; do mv "$f" `echo "$f" | sed 's/_//g'` ; done

编辑:由于其他人的建议修改了一些东西,但我担心我的代码对于奇怪的文件名仍然不好。

于 2013-06-24T21:38:52.797 回答
1

也许是这样:

find model -name "*_*" -type f -maxdepth 1 -print |  sed -e 'p;s/_//g' | xargs -n2 echo mv

分解:

  • 查找包含至少一个下划线plain files的目录中的所有model内容,并且不要搜索子目录
  • 使用sedmake 文件名调整 - 替换为_
  • 还打印旧名称
  • 将这两个文件名提供给xargs将重命名文件的内容mv

以上是试运行。满意后,删除echo之前mv的实际重命名。

警告:如果文件名包含空格,将不起​​作用。如果你有GNU sed你可以

find . -name "*_*" -maxdepth 1 -print0 |  sed -z 'p;s/_//g' | xargs -0 -n2 echo mv

并且也可以使用带有空格的文件名...

于 2013-06-24T22:13:39.460 回答
1

在 zsh 中:

autoload zmv # in ~/.zshrc
cd model && zmv '(**/)(*)' '$1${2//_}'
于 2013-06-25T06:58:44.137 回答
0
marc@panic:~$ echo 'a_EmployeeData' | tr -d '_'
aEmployeeData
于 2013-06-24T21:38:57.550 回答
0

我在我的机器上遇到了同样的问题,但文件名有多个下划线。我使用rename了该g选项,以便删除所有下划线:

find model/ -maxdepth 1 -type f | rename 's/_//g'

或者如果没有子目录,就

rename 's/_//g'

如果您没有rename,请参阅Jaypal Singh 的回答

于 2016-01-25T18:51:35.657 回答