Frank Steinmetzger wrote:
> Am Sun, Oct 23, 2022 at 01:35:55AM -0500 schrieb Dale:
>
>> Well, I ran into a slight problem. This isn't much of a problem with
>> Linux but I'm not sure how this would work on windoze tho. The problem,
>> if it is one, is the file extension. Let's say I have a mp4 file that
>> is the older original file that I intend to replace. If the file I
>> intend to put in its place is a .mkv file, mv uses the .mp4 extension
>> because all it cares about is the name of the file, not what it is or
>> its content. So, I end up with a .mkv file that has a .mp4 extension.
>> It works here on Linux but not sure about windoze and such.
> It’s not a problem for as long as the application you open the file with
> does its own detection. I.e. you feed mp4 to mpv, but it recognises by
> itself that it’s mp4 and can handle it.
>
>> I looked at the man page and I don't see a way to tell it to retain the
>> extension. I see something about suffix but I don't think that is
>> related to this. If I just backspace and change the extension, it
>> basically moves the file and I end up with both the old and new file. I
>> wish I could write code and create a tool for this. :/
>>
>> Is there a way to work around this problem? It works great except for
>> losing the file extension.
> If you still want to stick to a terminal solution akin to mv, then there is
> no way around a little script which wraps mv by extracting the extension and
> filename base. You could also add some “intelligence” with regards to
> directories, in order to reduce the amount of effort required to use the
> command—in case your directories follow some schema or are constant.
>
>
> #!/usr/bin/sh
>
> [ "$#" -ne "2" ] && exit 1
> SRC="$1"
> DST="$2"
>
> SRC_EXT="${SRC##*.}"
> DST_BASE="${DST%.*}"
>
> # remove destination for the case that the extensions differ
> rm "$DST"
>
> mv "$SRC" "${DST_BASE}${SRC_EXT}"
>
I finally got a chance to try this. I saved it and made it executable.
It runs but gave me this error.
dmv torrent/video_name-old-place.mp4 video-name-new-place.mp4
bash: /bin/dmv: /usr/bin/sh: bad interpreter: No such file or directory
dale@fireball ~/Desktop/Crypt/Series $
My scripting skills are minimal at best. Still, I kinda got what your
script was doing. Those who have known me for a while understand how
miraculous that is. ROFL I did some googling. It seems to not be able
to find the 'shebang' part. Sure enough, sh isn't located in /usr/bin
here. It's in /bin tho. I edited that line so it can find it. When I
tried it, it worked but noticed another problem. It was leaving out the
dot, ".", before the extension. Back into the script I went. I revved
up my gears for a bit and made a edit. When I tried it again, I was
shocked. I almost fell in the floor. Dang thing worked perfectly with
me only having to edit once. I really did get how the script works,
sort of. O_O
This is the script as shown by cat:
root@fireball / # cat /bin/dmv
#!/bin/sh
[ "$#" -ne "2" ] && exit 1
SRC="$1"
DST="$2"
SRC_EXT="${SRC##*.}"
DST_BASE="${DST%.*}"
# remove destination for the case that the extensions differ
rm "$DST"
mv "$SRC" "${DST_BASE}.${SRC_EXT}"
root@fireball / #
I added a little . on that last line before the extension bit. I'm a
happy camper. Only thing is, turns out both source and destination file
have the same extension in this case. Still, I bet it will work. Then
I thought of a way to test this. I just changed the extension on the
destination file and did a move. I changed the .mp4 to .mkv on the
destination. When I used your move script, it used the .mp4 extension
from the original source file but used the old name. Perfect!!
Hope this makes the point. THANK YOU MUCH!!!!
Dale
:-) :-)