1

ネストされた構造のディレクトリ「images」があり、その中に .png ファイルがあります。また、多数の .svg ファイルを含む単純なディレクトリ「svg」もあります。各 .svg ファイルを、同じ名前の .png ファイルがある同じディレクトリに移動する必要があります。

単一の特定の .svg ファイルに対するこのコマンドは機能します。

find /images -name 'sample.png' | grep -v thumb | xargs -i{} dirname {}|xargs -0 -I {}  mv /svg/sample.svg {}

grep -v thumb が適用されるのは、.png ファイルごとに、「thumb」という名前の他のサブディレクトリに同じ名前のサムネイル ファイルがあるためです。

すべてのファイルに対してこのコマンドを書き込もうとしました:

find /svg/ -name "*.svg" -exec basename {} '.svg' \; | xargs -O -I {} "find /images/ -name {}"

しかし、私はエラーを受け取ります:「ベース名」はシグナル13で終了しました

さらに、この 2 番目のコマンドが機能する場合、次のステップはそれを最初のコマンドと結合することですが、別の問題があります。指定されたファイル名を最後のコマンド「mv」に送信するにはどうすればよいですか (コードの {???} を参照)。 ?

find /svg/ -name "*.svg" -exec basename {} '.svg' \; | xargs -O -I {} "find /images/ -name {}" | grep -v thumb | xargs -i{} dirname {}|xargs -0 -I {}  mv /svg/{???} {}
4

1 に答える 1

2

この bash スクリプトは動作するはずです。ソリューションをパイプラインに簡単に詰め込めない場合があります。

#! /bin/bash
for svg in svg/*.svg ; do
    name=${svg##*/}                                  # Remove the path.
    name=${name%.svg}                                # Remove the extension.
    png=$(find -name $name.png -not -path '*thumb*')
    dir=${png%$name.png}                             # Remove the filename.
    mv "$svg" "$dir"
done
于 2013-07-25T15:47:59.333 に答える