我试图通过截断文件名中出现第一个空格的文件来批量重命名某些文件.我写了一个简单的脚本来重命名这样做:
for i in *.fa; do rename 's/\s.*//' *.fa; done
Run Code Online (Sandbox Code Playgroud)
这在测试中工作正常,并根据需要产生以下结果:
$:~/testenv$ ls
NM_000016.5_LastMex1_4_12 23 0 1 KB882088_3062975-30.fa NM_000016.5_PastMex1_4_12 23 0 1 KB882088_3062975-30.fa
$:~/testenv$ for i in *.fa; do rename 's/\s.*//' *.fa; done
$:~/testenv$ ls
NM_000016.5_LastMex1_4_12 NM_000016.5_PastMex1_4_12
Run Code Online (Sandbox Code Playgroud)
不幸的是,我必须在很多文件上做到这一点,大约670万.这给了我以下错误:
/usr/bin/rename: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种各样的技巧,即使我使用find它似乎无法拿起文件.
$:~/testenv$ ls
NM_000016.5_astMex1_4_12 23 0 1 KB882088_3062975-30.fa NM_000016.5_PastMex1_4_12 23 0 1 KB882088_3062975-30.fa
NM_000016.5_LastMex1_4_12 23 0 1 KB882088_3062975-30.fa
$:~/testenv$ find . -maxdepth 1 -type f -exec sh -c 'rename 's/\s.*//' *.fa' _ {} \;
find: `./NM_000016.5_PastMex1_4_12 23 …Run Code Online (Sandbox Code Playgroud)