2

我正在寻找可以将 Windows 用户目录中的用户文件复制到备份驱动器的脚本。我几乎希望转移除 Appdata 之外的所有内容。我做了一个非常简单的脚本,但由于我要转移的文件夹名称中有空格(例如'/media/gage/Backup\ Drive/'),它说不Drive'存在。

我正在尝试将目录从文件管理器拖放/粘贴到终端上,'一旦我将它拖过来,它就会在整个路径周围出现 s 。有没有办法让输入识别带有's 的文件名?

这是我到目前为止所拥有的(我对 bash 脚本真的很陌生)

#!/bin/bash
echo "Enter the full path to the user's directory"
read srcName
echo "Enter the full path to the backup directory"
read dstName
echo "Copying from Users to Backup"
cd $srcName
cp -rp Documents $dstName
cp -rp Pictures $dstName
cp -rp Desktop $dstName
cp -rp Music $dstName
cp -rp Videos $dstName
cp -rp Downloads $dstName
cp -rp Favorites $dstName

任何帮助表示赞赏

谢谢。

4

1 回答 1

3

终端早于拖放和复制粘贴,因此两者都没有以稳健的方式集成。由每个终端仿真器决定要做什么。

当您从图形文件管理器拖放一个或多个文件时,一些常见的反应如下:

  • xterm什么也没做。
  • gnome-terminal假设您将路径键入为空格分隔、shell 转义的单词,每个单词都完全单引号并带有适当的转义:

    '/path/foo' '/path/Rock Lobster - B-52'\''s.mp3'

  • konsole弹出一个菜单,让您选择复制/移动到 shell 的当前目录,或者将路径粘贴为 shell 转义词,如果它们包含元字符,则只有单引号:

    /path/foo '/path/Rock Lobster - B-52'\''s.mp3'

根据您的描述,您正在使用gnome-terminal并且没有尝试拖放包含单引号的文件以查看它对文件名的其他作用。


所以,你可以做什么?

我建议您只要求逐字复制粘贴路径,而不是拖放文件。这就是所有其他程序的工作方式,以及您可以使用 Charles Duffy 的解决方案来做什么。

要将路径复制粘贴为字符串而不是拖动文件,您通常可以在文件管理器中打开“属性”或“详细信息”选项卡,然后从那里复制完整路径。

但是,为了好玩,如果您真的愿意,可以通过以下方式将输入解释为文件管理器中拖放的文件,方法是使用以下命令填充数组eval

#!/bin/bash    
echo "Drag&Drop files/dirs and press enter when done."
echo "Do not drag&drop/paste/type text, because it will be evaluated as code."
IFS="" read -r input
eval "files=( $input )"

echo "Here are the things you pasted:"
for file in "${files[@]}"
do
  ls -ld "$file"
done

像这样运行:

$ ./test
Drag&Drop files/dirs and press enter when done.
Do not drag&drop/paste/type text, because it will be evaluated as code.
'/usr/local/home/me/Documents' '/usr/local/home/me/Downloads'

Here are the things you pasted:
drwxr-x--- 3 me eng 4096 Aug  7 13:46 /usr/local/home/me/Documents
drwxr-x--- 2 me eng 4096 Aug 17 14:32 /usr/local/home/me/Downloads
于 2015-08-17T22:00:51.617 回答