【发布时间】:2014-01-06 23:47:22
【问题描述】:
如何删除具有这种结构的文件名列表中的单词“myfile”?
mywork_myfile_XSOP.txt
mywork_myfile_ATTY.txt
mywork_myfile_ATPY.txt
Desired_output:
mywork_XSOP.txt
mywork_ATTY.txt
mywork_ATPY.txt
【问题讨论】:
如何删除具有这种结构的文件名列表中的单词“myfile”?
mywork_myfile_XSOP.txt
mywork_myfile_ATTY.txt
mywork_myfile_ATPY.txt
Desired_output:
mywork_XSOP.txt
mywork_ATTY.txt
mywork_ATPY.txt
【问题讨论】:
最简单的方法是使用常见的rename 命令,该命令在大多数 Unices 中都可用。
rename 's/^mywork_myfile_/mywork_/' *
这当然希望您位于文件的目录中。这不会覆盖文件。如果需要,只需传递 -f 选项。另外请注意,rename 有多个版本,可能有不同的选项。
【讨论】:
基于this answer 上的“重命名所有文件”将目录中的所有文件从 $filename_h 重命名为 $filename_half?”,这可以是一种方式:
for file in mywork_myfile*txt
do
mv "$file" "${file/_myfile/}"
done
注意它使用 bash 字符串操作如下:
$ file="mywork_myfile_XSOP.txt"
$ echo ${file/_myfile/}
mywork_XSOP.txt
【讨论】:
bash,所以我不会担心POSIX兼容性。也就是说,一般来说,不能假设 bash 是系统外壳 (Ubuntu) 或系统外壳是 bash (Mac OS X) 的当前版本。
bash。删除它。
这适用于任何 Posix shell...
#!/bin/sh
for i
in mywork_myfile_XSOP.txt \
mywork_myfile_ATTY.txt \
mywork_myfile_ATPY.txt; do
set -x
mv "$i" "$(echo $i | sed -e s/myfile_//)"
set +x
done
【讨论】:
$() 而不是 ````
mv 的两个参数也应该被引用。