Jeff Woods wrote:for file in prefix-* ; do mv "$file" "${file##prefix-}" done
What happens if one of the files is named "prefix-prefix-1"?
It gets renamed to prefix-1, which is what I would expect.
No. Because you used two of "##" it removes all instances of "prefix1" from the front of the variable and the resulting filename would be "1".
What about "prefix-"?
I suggest:
for file in prefix-?* do mv "$file" "${file#prefix-}" done
Huh?
I added "?" to the pattern so that a file with the exact name "prefix-" would not be selected since that would result in a modified filename that was an empty string.
I also reduced the "##" to "#" so it only removes one "prefix-" from the beginning even if there are more than one.
Like I said, "Almost correct." Your version works in all cases except for filenames matching patterns "prefix-" and "prefix-prefix-*" where it would fail or give what are probably undesired results.
--
Jeff Woods <kazrak+kernel@xxxxxxxxxxx>
- : send the line "unsubscribe linux-admin" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html