1

データ構造は以下のようなものですが、「lane-7」を「lane-5」に変更したいと思います。このようなコマンドを考えていますが、うまくいきません。

    find PATH -name "lane-7*" | xargs -i echo mv {} `echo {}|sed 's/lane-7/lane-5/'` | sh

何か案が?ありがとう

PATH/28/lane-7-22.fq
PATH/28/lane-7-21.fq
PATH/28/lane-7-18.fq
PATH/28/lane-7-24.fq
PATH/28/lane-7-23.fq
PATH/28/lane-7-19.fq
PATH/28/27/lane-7-22.fq
PATH/28/27/lane-7-21.fq
PATH/28/27/lane-7-18.fq
PATH/28/27/lane-7-24.fq
PATH/28/27/lane-7-23.fq
PATH/28/27/lane-7-19.fq
PATH/28/27/26/lane-7-22.fq
PATH/28/27/26/lane-7-21.fq
PATH/28/27/26/lane-7-18.fq
PATH/28/27/26/lane-7-24.fq
PATH/28/27/26/lane-7-23.fq
PATH/28/27/26/lane-7-19.fq
PATH/28/27/26/25/lane-7-22.fq
PATH/28/27/26/25/lane-7-21.fq
PATH/28/27/26/25/lane-7-18.fq
PATH/28/27/26/25/lane-7-24.fq
PATH/28/27/26/25/lane-7-23.fq
PATH/28/27/26/25/lane-7-19.fq
...
4

2 に答える 2

2

renameを使用します。このために作成されました。

find PATH -name "lane-7*" | xargs rename "lane-7" "lane-5"

代わりに、perl バージョンのrenameを使用している可能性があります (Debian はデフォルトでインストールします)。その場合は、代わりに perl 式を使用してください:

find PATH -name "lane-7*" | xargs rename "s/^lane-7/lane-5/"
于 2012-04-06T16:31:31.820 に答える
2

whileループと bash 文字列置換を使用してこれを行うことができます。

find PATH -name "lane-7*" | while read -r file ; do
  echo mv $file ${file/lane-7/lane-8}
done

良さそうな場合は削除しechoます。

于 2012-04-06T16:28:28.530 に答える