Regex 重命名多个“;str1-str2.txt“;文件到";str2-str1.txt“;

Regex 重命名多个“;str1-str2.txt“;文件到";str2-str1.txt“;,regex,bash,unix,command-line,Regex,Bash,Unix,Command Line,我在一个名为以下的目录中有许多文件: str1 - str2.txt 如何在bash中将它们重命名为: str2 - str1.txt str1-是一个字符串,包含字母数字字符、空格,在某些情况下还包含一个或多个-字符 str2-是仅包含字母数字字符的字符串 我可以使用rename'y/str1-str2/str2-str1/'*命令逐个重命名它们,但我想找到一个合适的正则表达式来同时重命名所有文件 要使用脚本重命名当前目录中的所有文件 list=`ls *-*.txt` for fi

我在一个名为以下的目录中有许多文件:

str1 - str2.txt
如何在bash中将它们重命名为:

str2 - str1.txt
  • str1
    -是一个字符串,包含字母数字字符、空格,在某些情况下还包含一个或多个
    -
    字符
  • str2
    -是仅包含字母数字字符的字符串

我可以使用
rename'y/str1-str2/str2-str1/'*
命令逐个重命名它们,但我想找到一个合适的正则表达式来同时重命名所有文件

要使用脚本重命名当前目录中的所有文件

list=`ls *-*.txt`

for files in $list
do
  mv $files `echo "$files" | awk -F '.' '{print $1}' | gawk '{match($0, /([^-]*)
  (-+)(.*)/, a); print a[3],a[2],a[1]".txt"}' | tr -d [:space:]`
done

要使用脚本重命名当前目录中的所有文件

list=`ls *-*.txt`

for files in $list
do
  mv $files `echo "$files" | awk -F '.' '{print $1}' | gawk '{match($0, /([^-]*)
  (-+)(.*)/, a); print a[3],a[2],a[1]".txt"}' | tr -d [:space:]`
done

试试这个。我正在使用sed生成要运行的命令列表。您可以将其捕获到文件中并执行该文件

ls | sed 's/\(.*\) - \([A-Za-z0-9_]*\)\.txt/mv "\1 - \2.txt" "\2 - \1.txt"/g' \
   | grep "^mv" > mv_commands
## Verify that the correct mv commands were generated in the "mv_commands" file
sh commands

试试这个。我正在使用sed生成要运行的命令列表。您可以将其捕获到文件中并执行该文件

ls | sed 's/\(.*\) - \([A-Za-z0-9_]*\)\.txt/mv "\1 - \2.txt" "\2 - \1.txt"/g' \
   | grep "^mv" > mv_commands
## Verify that the correct mv commands were generated in the "mv_commands" file
sh commands

名为
mmv
的很棒的工具可以做这样的事情

$ touch "str1 - str2.txt"
$ mmv -v "str* - str*.txt" "str#2 - str#1.txt"
str1 - str2.txt -> str2 - str1.txt : done
$ ls -l
total 0
-rw-r--r--  1 hashier  wheel  0 Sep 21 20:05 str2 - str1.txt
$

当然,您需要根据自己的需要对其进行一些调整,但是
mmv
mcp
。。。非常强大

一个叫做
mmv
的很棒的工具可以做这样的事情

$ touch "str1 - str2.txt"
$ mmv -v "str* - str*.txt" "str#2 - str#1.txt"
str1 - str2.txt -> str2 - str1.txt : done
$ ls -l
total 0
-rw-r--r--  1 hashier  wheel  0 Sep 21 20:05 str2 - str1.txt
$

当然,您需要根据自己的需要对其进行一些调整,但是
mmv
mcp
。。。你真的很强大

我没抓住你。你试过上面的吗?你的输出是多少<代码>\1和
\2
表示正则表达式匹配组,而不是实际的
1
2
。如果它不起作用,你能举出一些它不起作用的例子吗;rm-rf ~在那个目录中,您可能会遇到真正的麻烦。你想要
sed-nr'/^([[:alnum:][]*)-([[:alnum:][]*)\.txt$/s//mv\2\1.txt/p'
,如果没有别的原因,那是因为这是一个坏习惯,让你像那样放松警惕。我没有理解你。你试过上面的吗?你的输出是多少<代码>\1和
\2
表示正则表达式匹配组,而不是实际的
1
2
。如果它不起作用,你能举出一些它不起作用的例子吗;rm-rf ~在那个目录中,您可能会遇到真正的麻烦。你想要
sed-nr'/^([[:alnum:]]*)-([[:alnum:]]*)\.txt$/s//mv\2\1.txt/p'
,如果没有别的原因,因为这是一个坏习惯,你就这样放松警惕。