Is there a shortcut in Shell/Bash that can rename all the files in a folder based on a regex or some other criteria. What I am looking for here is in my folder documents, that has let's say a 100 text files with the following naming convention:
<longdocumentidentifier>-doc-<counter>.txt.
I need to rename all the files with the above given convention to just:
doc-<counter>.txt
Is there a one-liner that can help me with the above?
You can press and hold the Ctrl key and then click each file to rename. Or you can choose the first file, press and hold the Shift key, and then click the last file to select a group.
I would suggest something like this:
for i in *-doc-*.txt; do mv "$i" "${i/*-doc-/doc-}"; done
${i/*-doc-/doc-}
replaces the first occurrence of *-doc-
with doc-
.
If you need to do more than one replacement (see comment number 1), you need to use the ${var//Pattern/Replacement}
variant. If you need to replace the beginning of the name you need to use ${var/#Pattern/Replacement}
, if you need to replace the end (ie: the extension) you need to use the ${var/%Pattern/Replacement}
form.
See Shell Parameter Expansion for more details. This expansion is bash specific.
If you have rename
then, rename 's/^.*-doc-/doc-/' *.txt
should do the trick.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With