一般的な形式で名前が付けられた複数のファイルの名前を変更したいと思います。
text1 text2 [firstname.lastname] text3 ... textn.ext
ファイル名からテキストを削除したいです[firstname.lastname]
。作業を簡素化するには、[firstname.lastname]
すべてのファイルに名前と姓が固定されているとします。
Ubuntu 12.04を使用しており、次のコマンドを試しました。
$ find . -name "*.ext" -print | xargs sed -i 's/[firstname.lastname]//g'
しかし、うまくいきません。
ベストアンサー1
Bashワイルドカードを使用してください。
for i in *.ext; do
echo mv -nv -- "$i" "${i/firstname.lastname/}"
done
満足している場合は、エコーを削除してください。
サブディレクトリに移動する必要がある場合:
shopt -s globstar
for i in **/*.ext; do
echo mv -nv -- "$i" "${i/firstname.lastname/}"
done
echo
満足のいくものを削除してください。
使用find
:
find . -name '*.ext' -exec bash -c 'echo mv -nv -- "$0" "${0/firstname.lastname/}"' {} \;
echo
満足のいくものを削除してください。
名前を変更する方法はどうですか?すべての形式のパターンを削除します(したがって、ファイル名またはxxx.yyy
削除します)。そのために(最初の方法を使用):firstname.lastname
john.doe
james.brown
shopt -s extglob
for i in *.ext; do
echo mv -nv -- "$i" "${i/+([[:graph:]])\.+([[:graph]])/}"
done
または2番目の方法を使用してください。
shopt -s globstar extglob
for i in **/*.ext; do
echo mv -nv -- "$i" "${i/+([[:graph:]])\.+([[:graph:]])/}"
done
または、次のfind
方法を使用します。
find . -name '*.ext' -exec bash -c 'shopt -s extglob; echo mv -nv -- "$0" "${0/+([[:graph:]])\.+([[:graph:]])/}"' {} \;
firstname.lastname
パターンが常にスペースの間に含まれている場合は、パターン置換を使用することもできます。
"${i/*([[:space:]])+([[:graph:]])\.+([[:graph:]])*([[:space:]])/ }"
だから一行だけ残ります。
メモ。これらの方法はすべて、スペースやその他の興味深いシンボルを含むファイル名に対して100%安全です。