Using find
find assets -type d -exec sh -c '
for n in "$1"/*.png; do
test -f "$n" && mv "$n" "${n%.png}_old.png"
done' sh {} ';'
This find
command looks for directories in or under the assets
directory. For each found directory, it executes the following short shell script:
for n in "$1"/*.png; do
test -f "$n" && mv "$n" "${n%.png}_old.png"
done
where $1
will expand to the path to the found directory. The script will iterate over all filenames matching *.png
in the directory and replace the .png
filename suffix with _old.png
using a variable substitution.
The test -f
makes sure that we're operating on existing files. This is needed because if a directory dose not contain any files matching *.png
(as in the assets
, a
and a2
directories), then that pattern will remain unexpanded in $n
.
Alternatively, and shorter,
find assets -type f -name '*.png' \
-exec sh -c 'for n; do mv "$n" "${n%.png}_old.png"; done' sh {} +
Testing:
$ mkdir -p assets/a{,2}/b{,2,3}
$ touch assets/a{,2}/b{,2,3}/{a,b,c,d}.png
$ tree
.
`-- assets
|-- a
| |-- b
| | |-- a.png
| | |-- b.png
| | |-- c.png
| | `-- d.png
| |-- b2
| | |-- a.png
| | |-- b.png
| | |-- c.png
| | `-- d.png
| `-- b3
| |-- a.png
| |-- b.png
| |-- c.png
| `-- d.png
`-- a2
|-- b
| |-- a.png
| |-- b.png
| |-- c.png
| `-- d.png
|-- b2
| |-- a.png
| |-- b.png
| |-- c.png
| `-- d.png
`-- b3
|-- a.png
|-- b.png
|-- c.png
`-- d.png
9 directories, 24 files
(find
command executed here)
$ tree
.
`-- assets
|-- a
| |-- b
| | |-- a_old.png
| | |-- b_old.png
| | |-- c_old.png
| | `-- d_old.png
| |-- b2
| | |-- a_old.png
| | |-- b_old.png
| | |-- c_old.png
| | `-- d_old.png
| `-- b3
| |-- a_old.png
| |-- b_old.png
| |-- c_old.png
| `-- d_old.png
`-- a2
|-- b
| |-- a_old.png
| |-- b_old.png
| |-- c_old.png
| `-- d_old.png
|-- b2
| |-- a_old.png
| |-- b_old.png
| |-- c_old.png
| `-- d_old.png
`-- b3
|-- a_old.png
|-- b_old.png
|-- c_old.png
`-- d_old.png
9 directories, 24 files
find assets -type f -name '*.png' -exec sh -c 'for f do mv "$f" "${f%.png}_old.png"; done' sh {} +
? – Wildcard Feb 13 '18 at 21:53find
). Yes, I have updated that now. And thanks! – Kusalananda Feb 14 '18 at 06:59