将sed集成到find xargs copy shell命令中

时间:2014-06-13 05:44:10

标签: bash shell sed find xargs

我有一个脚本用于复制一个文件夹中的所有文件并将它们移动到一个新文件夹...我用来做这个的行看起来像这样

find "$SOURCEFOLDER" -type f | xargs -I {} ln {} "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}"

它完美无缺

问题是我还想使用sed从新文件的基本名称中删除任何括号,但我不知道如何合并sed命令

sed -e 's/\[[^][]*\]//g' FILE

我该怎么做呢?有没有更好或更简单的方法来做我想要的所有事情?

2 个答案:

答案 0 :(得分:1)

我相信以下内容适合您:

find "$SOURCEFOLDER" -type f -exec bash -c "sed -e 's/\[[^][]*\]//g' {} ; xargs -I {} ln {} "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}" \;

想法是以这种方式组合命令:

另一种方法是使用两个-exec

find "$SOURCEFOLDER" -type f -exec sed -e 's/\[[^][]*\]//g' {}\; -exec ln {} "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}" \;

我希望这会有所帮助。

答案 1 :(得分:1)

您可以使用-execdir find选项进行此重命名,并完全避免使用xargs

find "$SOURCEFOLDER" -type f -execdir bash -c 'sed "s/\[[^][]*\]//g" <<< "$1";
    ln "$1" "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}"' - '{}' \;