GitHubで見つけたサムネイルジェネレータPythonスクリプトを使用しようとしていますが、それは本当にうまくいきます。
名前付きフォルダにサムネイルを作成し、端末でeaDir_temp
NASの名前を変更する必要があります@eaDir
。著者はこれに対して次のコマンドを提供します。
find . -type d -name 'eaDir_tmp' -exec mv '{}' @eaDir \;
残念ながら、写真を含むすべてのサブフォルダに対して以下が返されます。
mv: cannot move ‘./subfolder/eaDir_tmp’ to ‘@eaDir/eaDir_tmp’: Directory not empty
私は何をすべきですか?
答え1
気になる人のために何が起こるのか:コマンド
find . -type d -name 'eaDir_tmp' -exec mv '{}' @eaDir \;
見つかった各./whatever/eaDir_tmp
ディレクトリ(コンポーネントなど)eaDir_tmp
を現在の作業ディレクトリに移動します。./whatever/eaDir_tmp
→ ./@eaDir
。 (パスコンポーネントは現在の作業ディレクトリに基づい@eaDir
ていると見なされるためです。)mv
最初は./@eaDir
まだ存在しない場合に生成されます。
2番目に./whatever/eaDir_tmp
見つかったのは引っ越しました入力する ./@eaDir
、なぜなら、この時点で与えられたターゲットディレクトリmv
()がすでに存在するからです:→。@eaDir
./whatever/eaDir_tmp
./@eaDir/eaDir_tmp
追加の検索も./subfolder/eaDir_tmp
行われます。このステップはすでに存在し、空ではないため失敗します。./@eaDir
./@eaDir/eaDir_tmp
あなたができること:find
実装が以下をサポートしている場合-execdir
:
find . -depth -type d -name 'eaDir_tmp' -execdir mv '{}' @eaDir \;
-depth
eaDir_tmp
これは、実際にネストされたディレクトリ(たとえば)の場合にのみ必要です./whatever/eaDir_tmp/whatever/eaDir_tmp
。
代わりに-exec
、現在の作業ディレクトリではなく一致-execdir
するファイルを含むディレクトリでfind
指定されたコマンドを実行します。
find
非標準をサポートしていない場合-execdir
:
find . -depth -type d -name 'eaDir_tmp' \
-exec sh -c 'mv "$1" "${1%/*}/@eaDir"' mysh {} \;
または、見つかったすべてのディレクトリに対してシェルを起動しないでください。
find . -depth -type d -name 'eaDir_tmp' -exec sh -c '
for dir
do
mv "$dir" "${dir%/*}/@eaDir"
done' mysh {} +