佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1539|回复: 19

如何处理乱码的文件名字

[复制链接]
发表于 21-10-2016 04:40 PM | 显示全部楼层 |阅读模式
我从电脑 ssh 进我的的raspberry pi,想移一个文件到我的电脑,但是那文件的中文名乱码了,只是显示 ???.txt,我要如何在terminal‘选’那文件?(想过rename成123.txt,但是没有办法在command指定那文件)
请问有什么方法?
回复

使用道具 举报


ADVERTISEMENT

发表于 21-10-2016 04:55 PM 来自手机 | 显示全部楼层
ls 列出所有文件名先咯,再复制文件名。

回复

使用道具 举报

 楼主| 发表于 21-10-2016 05:31 PM | 显示全部楼层
大赚小赔 发表于 21-10-2016 04:55 PM
ls 列出所有文件名先咯,再复制文件名。

请问如何复制文件名?如何piont to那个文件?
回复

使用道具 举报

发表于 26-10-2016 08:29 AM | 显示全部楼层
本帖最后由 林果皞 于 26-10-2016 03:14 PM 编辑

我没用过 raspberry pi, 不过略懂 linux 皮毛。

[1]
先用 locale 列出语言环境。

然后改全局 locale, LC_ALL=en_US.utf8

然后用 locale 看改成功了吗。

然后尝试再 ls。


[2] 用 ls -lia 看 inode (inode 在最左边 column), 然后通过 find -inum 那个 inode 处理文件,比如下图处理换文件名:


[3] geek 一点的方法,以 0a 为文件名字的开端和后端的分割线,用 $'\xab\xdc' hex 格式处理 (一个华语字, 占三个 \x):


注: 如果肯定是 ascii 而不是 unicode, 可以直接参参,不需要全部 \x (不过小心有些看起来像 ascii,实际上是 unicode, 如引号 ‘ 是 $'\xe2\x80\x99'):


注2: 文件名可以包括 newline。如 touch $'c\nd' 新建有 newline 的文件。所以 0a 不是稳定的解析条件,自己要拿捏得好。

注3: Terminal Emulator 它本身的 encoding 设置也会影响,但是楼主说 ???,问号乱码通常是发生在 locale,encoding 设置比较少有问号乱码 (如 utf7)。我也不考虑楼主用 ssh -X 打开 Terminal Emulator。

希望有帮到。
回复

使用道具 举报

 楼主| 发表于 26-10-2016 10:13 PM | 显示全部楼层
本帖最后由 aksin 于 26-10-2016 10:15 PM 编辑

---
回复

使用道具 举报

 楼主| 发表于 26-10-2016 10:15 PM | 显示全部楼层
林果皞 发表于 26-10-2016 08:29 AM
我没用过 raspberry pi, 不过略懂 linux 皮毛。

[1]
先用 locale 列出语言环境。

然后改全局 locale, LC_ALL=en_US.utf8

然后用 locale 看改成功了吗。

然后尝试再 ls。


[2] 用 ls -lia 看 inode ...

谢谢,第二个是我想要的方法,因为如果我在纯CLI上敲command,有时没有办法敲中文,所以第二个方法能让我迂回指定那个文件
请问那个-exec 是什么意思?是pipe | 的意思吗?
那个{}是指原本的文件名字吗? 可以用* 吗?
回复

使用道具 举报

Follow Us
发表于 26-10-2016 10:53 PM | 显示全部楼层
本帖最后由 林果皞 于 27-10-2016 12:22 AM 编辑

find .     #递归列出当下目录文件名。

find . -iname '*a*'     #递归列出当下目录中间有 a 字的文件名。记得加上单引号。

find . -exec ls -l {} \; #递归列出当下目录的文件名, 然后每列出一个(不会  print),执行一次 exec 的命令 ls -l {} 。

find . -exec echo 123 \;  #每列出一个, echo 123 字眼。

{}  是每列出一个的那个文件名字,用来给 exec 执行的代号。

上面开头讲的 -iname 是用文件 pattern 当搜寻条件,-inum 则是用文件独特的 inode 号码当搜寻条件。

切记,如果用 -inum,要 cd 去那个目录或指定 find /那个目录,如果你 find / 就是找完整个系统, 找到来天黑了。系统是没有 inode 地图的,只能一个个目录傻找。

-iname  是 case insensitive ('*a*' 包含 A), -name 是 case sensitive ('*a*' 不包  A)。

-exec 不是 pipe, 只是 find 命令的参数吧了。

你不需要换名字,可以直接 rsync,如:  
find . -inum 12324474 -exec rsync -azvb --no-t {} xiaobai@127.0.0.1:/tmp/ \;

忘记讲,-inum 时记得加 maxdepth 1,省下搜寻子目录。


回复

使用道具 举报

发表于 26-10-2016 11:24 PM | 显示全部楼层
本帖最后由 林果皞 于 12-11-2016 02:59 PM 编辑

[方法 4]
用 vim . 来浏览/运行(按 x)/改名 (也可以用 / 和 vim 一样搜索, 有乱码也能 play video。

我的 vi 其实是 vim.gtk3,不确定你的 vim 能不能支持 )。按 i 键可以 toggle 时间日期或 expanded tree view。按 "-" 键去上一级 parent 目录。按 Enter 进去 text 或 binaries view,这时候当然不希望按 :q 直接关掉 vim,所以必须按 Ctrl+^ 才能回去上一页(重复按 Ctrl+^ 可以切换 text/binaries view 和上一页之间)。



按 'x' 默认打开 player 可能不是你要的, 你可以用这行命令来更改成 webm, mp4, mkv 默认用  mplayer 打开:

for i in mp4,'video/mp4' mkv,'video/x-matroska' webm,'video/webm' ; do ext=${i%,*}; ftype=${i#*,}; fname="/tmp/my-vi-mplayer_$ext.desktop"; echo -e "[Desktop Entry]\nName=My vi mplayer\nExec=mplayer %u\nIcon=\nType=Application\nTerminal=false\nMimeType=$ftype" > "$fname"; xdg-desktop-menu install "$fname"; done



你也可以改成用 alias 或 function, 比如我的执行部分改成召唤 ~/.bash_aliases 叫 mm4 的 function):
for i in mp4,'video/mp4' mkv,'video/x-matroska' webm,'video/webm' ; do ext=${i%,*}; ftype=${i#*,}; fname="/tmp/my-vi-mplayer_$ext.desktop"; echo -e "[Desktop Entry]\nName=My vi mplayer\nExec=bash -c "'"'"source ~/.bash_aliases; mm4 %u"'"'"\nIcon=\nType=Application\nTerminal=false\nMimeType=$ftype" > "$fname"; xdg-desktop-menu install "$fname"; done



[更新: 文件名有 double quotes 要放在 /usr/bin/* 解决] for i in mp4,'video/mp4' mkv,'video/x-matroska' webm,'video/webm' ; do ext=${i%,*}; ftype=${i#*,}; fname="/tmp/my-vi-mplayer_$ext.desktop"; echo -e "[Desktop Entry]\nName=My vi mplayer\nExec=/usr/bin/mm4 %u\nIcon=\nType=Application\nTerminal=false\nMimeType=$ftype" > "$fname"; xdg-desktop-menu install "$fname"; done

p/s: 也可以用 NERDTree 取代 Netrw。再加上 ctrlp plugin (能搜索+xdg-open) 就完美了。可惜的是它处理 [ 和 ] 很 buggy,很常见的 youtube 文件名。现成的解决方法是只用 Netrw, 不用 NERDTree 。

根据你的说法似乎缺少 gui。没关系,可以用 mplayer -novideo 文件名, mplayer -vo caca -quiet 文件名,或 mplayer -vo fbdev -quiet
文件名来播放影片或歌曲。前者是完全没 video。后两者是有 ascii video (caca 和 fbdev 之间选其中一个可以看到视频的)。把这个选择放进去上面的 Exec= 那部分即可。
*【其它】 vlc 可以直接播放。图片则用 fbi (要 sudo)。

[方法 5]

用 nautilus 的 connect to server... (Either 在 Panel Menu 那里或 Other Location 那里找 "connect to server..." :

输入类似的 sftp://xiaobai@127.0.0.1/root  (我之前 Fedora 有 bug, 要先去 /root 先,再 Ctrl+L 更改成 / 浏览)。xiaobai 换成你的 rasberry 用户名,127.0.0.1 换成你的 rasberry IP。只需开启 ssh service 即可使用。用完右键  Unmount 即可。


[方法 6] 跟 5 相似用 mount,client 要安装 sshfs。
$ sudo mkdir /mnt/rpi; sudo sshfs -o allow_other xiaobai@127.0.0.1:/ /mnt/rpi
$ 用后 cd ~; sudo unmount /mnt/rpi 即可。


回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 27-10-2016 10:02 AM | 显示全部楼层
林果皞 发表于 26-10-2016 11:24 PM
[方法 4] 用 vim . 来浏览/运行(按 x)/改名 (也可以用 / 搜索,和 vim 一样。我的 vi 其实是 vim.gtk3,不确定你的 vim 能不能支持 )。按 i 键可以 toggle 时间日期或 expanded tree view。按 "-" 键去上一级 parent ...

谢谢解释。。。 【4】 的方法不太明白,本人只是基础而已啊。。。
回复

使用道具 举报

发表于 27-10-2016 05:28 PM | 显示全部楼层
本帖最后由 林果皞 于 27-10-2016 05:38 PM 编辑

[4] 是把 vim 当成 file manager 来用。你先试下执行 vim /tmp 或 vim .

你也可以在 vim 里头输入 :e路径 (用 <Tab> autocomplete) 来跳去你要的目录。
回复

使用道具 举报

发表于 27-10-2016 11:20 PM | 显示全部楼层
本帖最后由 林果皞 于 28-10-2016 02:22 PM 编辑

目标:
ssh 去 rasperry pi,把 vim 当成 file manager 来用。进去有乱码文件名的文件,然后 Ctrl+c 直接 copy 去你另一台的电脑。

设置步骤:
[0] 先确保另一台电脑 A (假设也是 linux) 和电脑 B rasperry pi ip yyy.yyy.yyy.yyy 和 两个都启动 ssh server, 如 sudo service ssh start 或 sudo service sshd start 或开机自动启动。

[1] 在电脑 linux A 制作储存的目录, mkdir ~/storage

[2] 在电脑 linux A, ssh 进去你的 rasperry pi ip yyy.yyy.yyy.yyy。

[3] ssh rasperry pi 后,执行这行命令 (只需改掉那两个 “用户名@xxx.xxx.xxx.xxx" 改成你的这台 linux 电脑 A 用户名和 ip):
mkdir -p ~/.ssh; chmod 700 ~/.ssh; ssh-keygen -f ~/.ssh/id_rsa -q -P ""; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys; ; cat ~/.ssh/id_rsa.pub | ssh 用户名@xxx.xxx.xxx.xxx "mkdir -p ~/.ssh; chmod 700 ~/.ssh; cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"; eval `ssh-agent -s`; ssh-add; ssh 用户名@xxx.xxx.xxx.xxx

[4] 成功后是在电脑 A linux 里头,Ctrl+D 或 exit 回去 rasperry pi。

[5] 在 rasperry pi, 确保安装 vim 或 gvim 或 vim.gtk3。

[6] vim ~/.vimrc 添加这两行 (inoremap 会 corrupt file,所以不放。为了方便看成功与否,没加 <Enter>), 更改成你 linux 电脑 A 的用户名和 ip 和开头 #[1] 决定的 storage 路径:
vnoremap <C-c> :!eval `ssh-agent -s`; ssh-add; rsync -azvb --no-t %:gs/./\\&/:p '用户名@xxx.xxx.xxx.xxx:/home/用户名/storage/'
nnoremap <C-c> :!eval `ssh-agent -s`; ssh-add; rsync -azvb --no-t %:gs/./\\&/:p '用户名@xxx.xxx.xxx.xxx:/home/用户名/storage/'

[5] 然后 :wq 储存关闭 vim。

以后 (不需要再做上面的步骤,除非 ip 改了):
[1] 开启两台电脑的 ssh 服务。 ssh rasperry pi,然后输入 vim . ("点号" 表示当下目录,你可以输入其它路径)。

[2] 然后在 Netrw 之下随便 Enter 进去你要复制的目录或任何文件。

[3] 如果是普通文件如 mp4, 就 Enter 进去看到一堆乱码内容,然后按上面 ~/.vimrc 弄好的快捷键 Ctrl+c, 再 Enter 即可实现 rsync。好了后, Enter 回去 mp4, Ctrl+ ^ 回去 Netrw 页面。复制目录也是一样道理, Enter 去那个目录再 Ctrl+c 即可。

注: 如果目标文件有 newline 的文件,我暂时想不到办法选,如有任何更新会在这儿。我没试验过 ??? 问号乱码的情况,所以有问题的话跟我讲。不过我已经在 Virtual Console 试验过乱码文件没问题, 单双引号参参也没问题。

注2: 上面涉及有关 ssh 的功能是为了让 vim 不用 password 从 rasperry pi 复制传送到电脑 A。

注3: ssh 输送声音暂时还没弄好,等弄好后在这更新。
回复

使用道具 举报

 楼主| 发表于 30-10-2016 08:29 PM | 显示全部楼层
林果皞 发表于 27-10-2016 05:28 PM
[4] 是把 vim 当成 file manager 来用。你先试下执行 vim /tmp 或 vim .

你也可以在 vim 里头输入 :e路径 (用  autocomplete) 来跳去你要的目录。

谢谢,明白了。。原来可以当file manager用。。
请问你有没有用omxplayer?播电影因为他的‘2’键 只是加速 到1.125x而已,不能1.2x,1.3x,1.4x.到1.9x. 有没有其他player推荐?
回复

使用道具 举报

发表于 30-10-2016 11:09 PM | 显示全部楼层
本帖最后由 林果皞 于 31-10-2016 02:41 AM 编辑
aksin 发表于 30-10-2016 08:29 PM
谢谢,明白了。。原来可以当file manager用。。
请问你有没有用omxplayer?播电影因为他的‘2’键 只是加速 到1.125x而已,不能1.2x,1.3x,1.4x.到1.9x. 有没有其他player推荐?

我都是用 mplayer, 不过不懂你的 raspberry pi support 到吗。

mplayer -speed 1.21 或 on the fly 按 [ 或 ] 键。

加快时,默认是 chipmunk/baby 声音,要加上  -af scaletempo 才可以拿到正常的声音 (pitch)。

不过 -af scaletempo 默认是没有快捷键的,你必须在 ~/.mplayer/input.conf 文件里头自定义快捷键,如:

xb@dnxb:~/Downloads$ cat ~/.mplayer/input.conf
; af_add scaletempo
' af_del scaletempo
xb@dnxb:~/Downloads$

常用的快捷键是:
上 / 下: 跳一分钟
左 / 右: 跳十秒
o: 看时间 OSD (按多几次有不同的 behavior)
9 / 0: 调小声, 调大声
space: 暂停
Esc / q: 关掉 player
[ / ]: 减速/加速 (不懂是不是我的耳朵问题,我通常要从快速变回 original 时,要从 original 减多一次,在加速一次到 original 才觉得速度正常)
f: toggle fullscreen


[mpv]
另一个选择是 mpv,是 mplayer 加强版, 命令行例子:
mpv --no-border -geometry 256x144+1095+600 -loop 0 -idle 2>/dev/null 影片.mkv

我喜欢它的地方是可以在 borderless 的情况下用滑鼠移动窗口,这一点是 mplayer 做不到的。

其它跟 mplayer 明显的区别是默认不需要 scaletempo 就有正常音, 而且有没有 caca 支持是一个大问题 (i.e. 在 virtual console 播放 ascii video),要自己另外 compile 或 `brew install mpv --with-libcaca` (用 `mpv --vo=help` 检查有没有 caca,我的 kali 没有)。它的 fullscreen 也默认有播放选项的按钮。还有 Esc 只是弄小 fullscreen 而不是关 player,不过按 'q' (quit) 就可以了。其它常用快捷键跟上面提过的  mplayer  快捷键一样。



回复

使用道具 举报

 楼主| 发表于 31-10-2016 05:49 PM 来自手机 | 显示全部楼层
林果皞 发表于 30-10-2016 11:09 PM
我都是用 mplayer, 不过不懂你的 raspberry pi support 到吗。

mplayer -speed 1.21 或 on the fly 按 [ 或 ] 键。

加快时,默认是 chipmunk/baby 声音,要加上  -af scaletempo 才可以拿到正常的声音 (pit ...

尝试了mplayer,画面几乎没动,声音也是一样,terminal说“your system is too slow to play this" ...
回复

使用道具 举报

发表于 31-10-2016 06:12 PM | 显示全部楼层
本帖最后由 林果皞 于 1-11-2016 08:09 PM 编辑
aksin 发表于 31-10-2016 05:49 PM
尝试了mplayer,画面几乎没动,声音也是一样,terminal说“your system is too slow to play this" ...


网上的方法你试验过了吗 ?
[1] -ao alsa
[2] -lavdopts threads=4

要不然你用 mpv,它有特别给 -vo rpi 的。
回复

使用道具 举报

 楼主| 发表于 6-11-2016 10:45 AM | 显示全部楼层
林果皞 发表于 31-10-2016 06:12 PM
网上的方法你试验过了吗 ?
[1] -ao alsa
[2] -lavdopts threads=4

要不然你用 mpv,它有特别给 -vo rpi 的。

试过了,不能。
mpv rpi的install 有问题,缺少好多library的东东。。我是看这里的https://nwgat.ninja/quick-easy-compiling-mpv-for-raspberry-pi/
回复

使用道具 举报


ADVERTISEMENT

发表于 7-11-2016 03:01 PM | 显示全部楼层
aksin 发表于 6-11-2016 10:45 AM
试过了,不能。
mpv rpi的install 有问题,缺少好多library的东东。。我是看这里的https://nwgat.ninja/quick-easy-compiling-mpv-for-raspberry-pi/

sudo vi 检查你的/etc/apt/sources.list,确保不是 wheezy, 而是  jessie 或 stable,因为 wheezy 没有 mpv。

deb http://mirrordirector.raspbian.org/raspbian/ stable main contrib non-free rpi

确保后,执行 `sudo apt-get update && sudo apt-get dist-upgrade`

过后尝试安装 `sudo apt-get install mpv`

回复

使用道具 举报

 楼主| 发表于 7-11-2016 08:14 PM | 显示全部楼层
林果皞 发表于 7-11-2016 03:01 PM
sudo vi 检查你的/etc/apt/sources.list,确保不是 wheezy, 而是  jessie 或 stable,因为 wheezy 没有 mpv。

deb http://mirrordirector.raspbian.org/raspbian/ stable main contrib non-free rpi

确保后 ...

我的就是wheezy...那要如何?upgrade 去jessie? 会不会影响其他的setting(如samba,deluge)?
回复

使用道具 举报

发表于 8-11-2016 12:46 AM | 显示全部楼层
本帖最后由 林果皞 于 8-11-2016 01:29 AM 编辑
aksin 发表于 7-11-2016 08:14 PM
我的就是wheezy...那要如何?upgrade 去jessie? 会不会影响其他的setting(如samba,deluge)?

dist-upgrade 是会影响没错。rf: http://askubuntu.com/a/639838/265303

那你先做  `sudo apt-get update && sudo apt-get upgrade` 先。再试 `sudo apt-get install mpv`。

如果是你 raspberry 很重要怕搞砸就算了, 看你情况。

忘记讲 vlc 也是可以考虑的, rf: http://raspberrypi.stackexchange ... ible-to-install-vlc








回复

使用道具 举报

 楼主| 发表于 8-11-2016 11:03 AM | 显示全部楼层
林果皞 发表于 8-11-2016 12:46 AM
dist-upgrade 是会影响没错。rf: http://askubuntu.com/a/639838/265303

那你先做  `sudo apt-get update && sudo apt-get upgrade` 先。再试 `sudo apt-get install mpv`。

如果是你 raspberry 很重要怕搞 ...

谢谢。。。VLC之前试过了,如果是用hardware decode的话,就不能控制电影,任何按键都不response ,如果set成software decode,电影就几乎不会动。至于jessie,看看有什么影响后再决定要不要upgrade。。。谢谢你的解答&#128591;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 25-4-2024 04:08 PM , Processed in 0.126171 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表