私はこれを文字列の検索と置換に使用しています。
find . -name 'xna*jpg' -exec bash -c ' mv $0 ${0/\ (2018_05_28 14_04_27 UTC)/}' {} \;
これにより、「xna(2018_05_28 14_04_27 UTC).jpg」がxna.jpgに置き換えられます。
その後、ディレクトリ全体に対してこれを実行できます。ただし、このエラーが発生します。
mv: ./xna.jpg is not a directory
だからそれをしていますが、書くことはありません。なぜディレクトリを考慮するのか分からないのですか?
ベストアンサー1
-exec bash -c ' mv $0 ${0/\ (2018_05_28 14_04_27 UTC)/}'
問題は次のとおりです。コンテンツは$0
スペースを含むように拡張され、mv
2つ以上のパラメータが表示されます。
解決策:何かを引用してください:
-exec bash -c ' mv "$0" "${0/\ (2018_05_28 14_04_27 UTC)/}"'
find
...またはまったく使用しないでください。
#!/bin/bash
# looks very similar, with less of the `shopt`ing, in zsh
shopt -s nullglob
shopt -s globstar
shopt -s dotglob
for original in "**/xna (2018_05_28 14_04_27 UTC)*jpg"; do
newname="${original/\ (2018_05_28 14_04_27 UTC)/}"
mv "${original}" "${newname}"
done
(必要に応じて1行にすることもできますが、ここでは簡潔さよりも読みやすさを好みます。)