Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read
Q&A

Using Lua's `os.rename` to rename a file from a hard drive to a new location on a USB flash drive

+2
−0

I'm using the os.rename function in a lua script. It works perfectly fine for renaming files on my hard drive, e.g.

os.rename("test.txt","/Users/username/Desktop/test2.txt")

will rename the file as desired.

However if the source file is on my hard drive and the target file is on a USB flash drive, the following operation

os.rename("test.txt","/Volumes/FLASHDRIVE/test2.txt")

will fail with the message

Cross-device link

which seems to indicate that the problem is that that source and target are on different file systems.

Is there any way to get os.rename to work in such a case or should I better resort to a workaround like

os.execute("mv  test.txt /Volumes/FLASHDRIVE/test2.txt")

?


I'm using

  • Lua 5.4.4
  • macOS 11.6.8
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

Getting error message on failure (3 comments)

1 answer

+2
−0

Your diagnosis appears to be correct. Per https://www.lua.org/pil/22.html

Because Lua is written in ANSI C, it uses only the functions that the ANSI standard defines.

POSIX rename extends the definition of ANSI's rename with, in particular:

The rename() and renameat() functions shall fail if:
...
[EXDEV] The links named by new and old are on different file systems and the implementation does not support links between file systems.

So os.rename is not a solution and you need to either look for cross-platform libraries which implement a file move using other underlying functions or, as you suggest, use a platform-specific workaround.

Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

Thanks a lot for finding the relevant information! (1 comment)

Sign up to answer this question »