我在一个文件夹中有几个文件。我必须使用正则表达式模式匹配文件名。在正则表达式模式中,我有一个单词,它将是一个变量。我希望将与模式匹配的所有文件移动到一个单独的目录,并使用备用文件名替换我进行匹配的字符串。
例如,
我有许多文件,文件名在目录中有单词foo,如
gadgeagfooafsa
fsafsaffooarwf
fasfsfoofsafff
我必须列出这些文件并将其复制到另一个目录中,从中替换foo一词。我已经指定新模式为“kuh”,就像上面的文件应该被复制到新文件夹中
gadgeagkuhafsa
fsafsafkuharwf
fasfskuhfsafff
最后,我可以将不同的命令组合在一起以在一行中执行这些命令吗? :)
我曾尝试过这个命令,但它没有用,不知道副本是否失败。
ls | grep ".*foo[} ].*" | xargs cp -t work/
答案 0 :(得分:0)
find
+ bash
解决方案:
find . -type f -name "*foo*" -exec bash -c 'fn=${0##*/}; cp "$0" "new_dest/${fn//foo/kuh}"' {} \;
fn=${0##*/}
- 解压文件 basename ${fn//foo/kuh}
- 用文件名中的foo
替换kuh
使用您当前的目标目录名替换/调整new_dest
。
答案 1 :(得分:0)
我选择/ tmp作为新目的地,并且只使用了两个示例文件
newdest="/tmp"; fp="foo"; np="kuh"; for f in $(find . -type f -name "*$fp*"); do new=$(echo $f| sed "s/$fp/$np/g"); cp -f $f $newdest/$new ; done
移动并重命名文件
ls /tmp/*kuh*
/tmp/fsafsafkuharwf /tmp/gadgeagkuhafsa
答案 2 :(得分:0)
如果所有文件都在同一个文件夹中
使用bash
for i in *foo* ;do mv "$i" /tmp/"${i/foo/kuh}";done