findで見つけたファイルを上書きしますか?

findで見つけたファイルを上書きしますか?

ファイルのリストがあります

-rw-rw-r-- 1 t t 24813 Oct 23  2002 fig8_21.gif
-rw-rw-r-- 1 t t  2259 Oct 23  2002 fig8_21t.gif
-rw-rw-r-- 1 t t 35331 Oct 23  2002 fig8_23.gif
-rw-rw-r-- 1 t t  2610 Oct 23  2002 fig8_23t.gif
-rw-rw-r-- 1 t t 19970 Oct 23  2002 fig8_24.gif
-rw-rw-r-- 1 t t  2019 Oct 23  2002 fig8_24t.gif
-rw-rw-r-- 1 t t 54623 Oct 23  2002 fig8_3.gif
-rw-rw-r-- 1 t t  3657 Oct 23  2002 fig8_3t.gif
-rw-rw-r-- 1 t t 35861 Oct 23  2002 fig8_4.gif
-rw-rw-r-- 1 t t  2344 Oct 23  2002 fig8_4t.gif

たとえば、コピーして上書きを<...>t.gif使用して上書きしたいと思います。<...>.giffig8_4.giffig8_4t.gif

私は<...>t.gifこれらのファイルを見つけることから始めますfind . -regex ".*t\.gif"。次に、ファイル名の削除を使用したいのですが、basename次の警告が表示されるのはなぜですか?

$ find .  -regex ".*t\.gif" -execdir basename {} \;  
find: The relative path `~/program_files/internet/SSH_tunneling/' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find.  Please remove that entry from $PATH

$ find .  -regex ".*t\.gif" | xargs basename 
basename: extra operand ‘./f10_1t.gif’

ミッションをどのように進めますか?

使用してはいけませんかfind

ベストアンサー1

はい、可能です。 1つのアプローチは次のとおりです。

cd /den/of/gifs && \
for f in ./*t.gif; do
    mv -- "${f%%t.gif}.gif" "$f"
done

最も長い一致文字列を削除するための${var%%pattern}標準/POSIX構文。sh模様年末から始まります$var

おすすめ記事