Findは素晴らしいユーティリティであり、非常に汎用性があります。既存のファイル名にサフィックスまたはプレフィックスを追加してファイル名を変更しようとしています。クール。
find -name "*" -exec mv {} {}.yo \;
今理解できない部分ですね -上記の作業をキャンセルする必要がある場合はどうすればよいですか?
編集する -
接頭辞を付けることができないことがわかりました。この問題を解決する方法はありますか?
find -type f -name "*" -exec mv {} yu.{} \;
mv: cannot move './o.txt.yu.yu' to 'yu../o.txt.yu.yu': No such file or directory
ベストアンサー1
find . -depth -name '*.yo' -exec sh -c '
ret=0
for file do
mv -i -- "$file" "${file%.yo}" || ret=$?
done
exit "$ret"' sh {} +
file.yo
これにより、サフィックスを追加するために使用したコマンドなどのディレクトリを含む、すべての種類のファイル名なしでに.yo
変更されます。最初の名前に名前を変更してからその名前に変更すると、もはや存在しないため機能しません。file
.yo
dir.yo
dir
dir.yo/file.yo
dir.yo/file
dir.yo
-depth
ほぼ常にバッチの名前変更を使用する方が良いので、常に使用することをお勧めします。覚えておくべき唯一のことは-prune
。
含めるディレクトリコンポーネントへのフルパスを使用するため、プレフィックスを使用することは機能しませんmv {} prefix{}
が{}
、ファイル名にプレフィックスを追加するには次のようなものが必要です。
find . -depth -type f -exec sh -c '
ret=0
for file do
dir=${file%/*} name=${file##*/}
mv -i -- "$file" "$dir/yu.$name" || ret=$?
done
exit "$ret"' sh {} +
今回は-type f
名前の変更に使用します。定期的な以下を含む他のすべての種類のファイルを除くファイル目次、先入選出、装備、シンボリックリンク、等。
mmv
zsh
これらの作業を手動で実行する代わりに、Or'sなどの専用のバッチ名変更ツールを使用することをお勧めしますzmv
。
存在するzsh
:
autoload -Uz zmv
zmv '(**/)(*).yo(#qD)' '$1$2' # remove .yo suffix
zmv '(**/)(*)(#qD.)' '${1}yu.$2' # add yu. prefix to regular files
(#q...)
あるグローバル予選ここで、D
zmvはfind
デフォルトで隠しファイルまたは隠しディレクトリのファイルも考慮するように指示し、s.
と同じです。find
-type f