使用Cut从一堆文件名中删除前n个字符

时间:2015-02-03 17:32:09

标签: bash cut

我正在使用

ls | cut -c 5-

这确实以我想要的格式返回文件名列表,但实际上并没有执行该操作。请指教。

5 个答案:

答案 0 :(得分:37)

rename -n 's/.{5}(.*)/$1/' *

-n用于模拟;删除它以获得实际结果。

答案 1 :(得分:19)

当您位于要重命名的文件夹中时,可以使用以下命令:

rename -n -v  's/^(.{5})//' *

-n不执行任何操作,-v显示更改内容。如果您对结果感到满意,可以删除它们

rename 's/^(.{5})//' *

答案 2 :(得分:2)

这样的事情应该有效:

for x in *; do
    echo mv $x `echo $x | cut -c 5-`
done

请注意,这可能具有破坏性,因此首先以这种方式运行,然后在您确信它符合您的要求后删除前导echo

答案 3 :(得分:1)

Kebman 的小代码非常适合如果您想在 7zipping 或 zipping 之前切断当前目录中隐藏文件和文件夹的前导点。

我把它放在一个 bash 脚本中,但我的意思是:

for f in .*; do mv -v "$f" "${f:1}"; done # cut off the leading point of hidden files and dirs

7z a -pPASSWORD -mx=0 -mhe -t7z ${DESTINATION}.7z ${SOURCE} -x!7z_Compress_not_this_script_itself_*.sh # compress all files and dirs of current dir to one 7z-file, excluding the script itself.

zip 和 7z 可能会在当前目录的顶层隐藏文件时遇到问题。 接受子目录中的隐藏文件。

mydir/myfile = ok
mydir/.myfile = ok
.mydir/myfile = nok
.mydir/.myfile = nok

答案 4 :(得分:0)

如果您看到一条错误消息,

  

重命名不能识别为cmdlet的名称

这可能对您有用,

get-childitem * | rename-item -newname { [string]($_.name).substring(5) }