根据其他目录创建目录名称

根据其他目录创建目录名称

我有目录:

  • 费用

但我也有一些目录,其名称如下:

  • Ipsum - 洛雷姆
  • 多洛 - 坐

如果目录不包含连字符,则应忽略如果目录包含连字符:Mkdir Ipsum; mv Ipsum\ -\ * Ipsum

这可能吗?

编辑以澄清:如果有一个带有连字符的目录,我想根据连字符前部分创建一个新目录名称,然后将包含连字符前部分的所有目录移动到该新目录中。

答案1

您可以使用 bash 子字符串扩展功能。

${parameter%%word} 删除匹配的后缀模式。

for f in *;do
    mv "$f" "${f%% -*}"
done

答案2

对的,这是可能的。将这样的代码放入一个文件中,例如 fix-dashes.sh (我使用的是 Mac OS,但这应该适用于其他 Unices):

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
trap 'IFS=$SAVEIFS' 0
for i in $@
do
  echo Processing $i
  case $i in
    *-*)
      echo "'$i' has a dash"
      destname=$(echo "$i" | sed 's/ -.*//')
      echo mv "$i" $destname
      mv "$i" $destname
      ;;
  esac
done

然后bash fix-dash.sh */将按照您指定的方式重命名目录。斜杠很重要,这样您只能获取目录名称,否则带有破折号的常规文件将受到影响。

`IFS 包含单词的分隔符,并且由于您的文件名包含空格,因此您需要调整。

我喜欢使用有限的正则表达式机制,因为它模仿命令行上case使用的 RE 。bash在这种情况下,只有包含破折号的名称才会导致执行重命名。

sed命令执行转换,在本例中,用空字符串替换第一个之后的所有内容。

相关内容