终端中的OS X cp命令 - 没有这样的文件或目录

19

或许今天是那种我的大脑完全不工作或者我格外蠢的日子。我一直在尝试复制文件(实际上是目录 .app、.bundle 等),但总是出现错误“没有这个文件或目录”。我已经尝试了所有可能的组合,使用无 / 斜杆,使用文件名,不使用文件名。求助! :/

原始目录:~/desktop/directory/file.bundle

目标目录:/library/application\ support/directory

换句话说,file.bundle 需要放在上面的目录中。

尝试过:

# cp $HOME/Desktop/directory/file.bundle /library/application\ support/directory
cp: /Users/airhead/Desktop/directory/file.bundle: No such file or directory

# cp -rf ~/desktop/directory/file.bundle /library/application\ support/directory/ 
cp: /Users/airhead/Desktop//directory/file.bundle: No such file or directory

# cd ~/

# cp -r directory/file.bundle /library/application\ support/directory/file.bundle
cp: /Users/airhead/Desktop/directory/file.bundle: No such file or directory

# cp -Rf $HOME"/directory/file.bundle" "/library/application\ support/directory/"
cp: directory /Library/Application\ Support/directory/ does not exist

附加信息:

# ls -la $HOME/Desktop/directory/
ls: /Users/airhead/Desktop/directory/: No such file or directory

为了涵盖明显的要点:您的文件系统是否不区分大小写?您是否忘记了cp的目标参数(例如cp“$HOME/Desktop/directory/file.bundle”“/library/application support/directory”)? - Max Leske
@MaxLeske - 你好Max,输出结果在问题中已经给出。如果我在Finder中获取文件信息,我会得到'/Users/airhead/Desktop/'文件名:目录。 - Cocoa Puffs
@Bogdan - 在我的电脑上似乎没有关系,我可以输入cd /Library/或cd /library/...结果相同。 - Cocoa Puffs
我认为问题在于directory根本不是一个目录,而是一个普通文件或链接。请发布ls -la $HOME/Desktop/的输出。 - Max Leske
@CocoaPuffs,是的,我的错,它默认是不敏感的(尽管保留大小写)。 - fjarri
显示剩余6条评论
4个回答

21

我知道这个问题已经有了答案,但另一个选项是在 Finder 中打开目标和源文件夹,然后将它们拖放到终端中。路径将自动被复制并正确格式化(从而消除了实际上需要找出正确文件名/扩展名的需要)。

我必须在Mac和Windows机器之间进行网络复制,有时会深入到文件树中,发现这是最有效的方法。

所以,以一个例子为例:

cp -r [从Finder中拖放源文件夹] [从Finder中拖放目标文件夹]


2
谢谢!当您想要cd进入一个新目录,但终端不认识它时,拖放也可以起作用。我刚刚执行了cd {拖动文件夹到终端},它打印出了完整的路径名,然后就可以进入该目录了。 - Azurespot
你也是正确的,Nicolas。根据OS X的man页面,“cp实用程序的历史版本有一个-r选项。该实现支持该选项;但是,强烈不建议使用它,因为它不能正确地复制特殊文件、符号链接或fifo。”因此,如果有人遇到复制问题,请确保使用-R选项。 - mdhansen

6

解决方案概述:

directory 既不是现有的文件也不是目录。实际上,通过 ls -la $HOME/Desktop/ 显示,真正的名称是 directory.1

完整的可用命令如下:

cp -R $HOME/directory.1/file.bundle /library/application\ support/directory/

使用-R参数进行递归复制(复制目录必须使用此参数)。

谢谢,知道当一个目录的结尾有.1作为扩展名时,Finder默认会隐藏它,这很有帮助 :) - Cocoa Puffs
非常乐意:). .1通常由Finder添加到两个同名文件或目录之间进行区分,因此当您尝试复制时可能会发生这种情况。 我的猜测是:您曾经有一个名为directory的目录,然后复制了它(命名为directory.1),然后(不知何故)删除了“ directory”。 Finder可能显示了不同的字符串,因为它缓存了信息。 - Max Leske

0

在OS X Sierra 10.12上,以上方法都不起作用。 使用cd命令然后拖放也不起作用。 没有空格或其他修复方法可以解决问题。 我无法使用任何技术进入~/Library Support目录。 这是一个安全功能吗?
我将尝试禁用SIP并查看是否有所不同。


0
在我的情况下,我不小心将一个文件夹命名为“samples ”。 当我执行“ls -la”时,我看不到空格。
最终,当我尝试使用Tab键自动完成并看到“samples\ /”时,我意识到了这一点。
为了解决这个问题,我运行了
mv samples\  samples

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接