小编syn*_*ror的帖子

如何防止`mv`将一组文件移动到一个常规文件中?

由于我犯的一个愚蠢的错误,我刚刚丢失了我的音频收藏的一小部分。:-( 很
高兴我有一个相当新的备份,但它仍然很烦人。除了你的真实之外,另一个做恶作剧的罪魁祸首是mv,它将显示如下:

音频文件有一定的方案:

ARTIST - Some Title YY.mp3
Run Code Online (Sandbox Code Playgroud)

其中YY是 2 位数年份规范。

mkdir 90<invisible control character>
Run Code Online (Sandbox Code Playgroud)

(直到此刻,我都不知道我实际上输入了三分之一看不见的多余字符......!)
我希望将所有 1990 年代的音乐都放在一个目录中,而不是将所有内容都放在一个目录中。所以我输入:

find . -name '* 9?.mp3' -exec mv {} 90 \;
Run Code Online (Sandbox Code Playgroud)

不难明白发生了什么,嗯?:->
(灾难性的)结果是一个名为“90 something ”的原始目录(某些东西是“隐形”控制字符)和一个名为“90”​​的单个文件,被覆盖了n次。

所有文件都不见了。:-(( (明显地)

Wishmv会及时检查目标“文件”的签名(请记住 *NIX: Everything Is A File是否d------(例如drwxr-xr-x)开头。而且,当然,目的地是否存在。有上述情况下,当你只是一个变种mkdir的目录第一。(当然,你假设它在那里......)

甚至我们以大写字母W开头的讨厌的操作系统也会这样做。如果您要求,甚至会提示您指定目标类型(文件?目录?)。

因此,我想知道我们 *NIXers …

mv

17
推荐指数
4
解决办法
2036
查看次数

sed - 删除文件中最后一次出现的字符串(逗号)?

我有一个非常大的 csv 文件。你将如何,用 sed (或类似的)删除最后一个?

...
[11911,0,"BUILDER","2014-10-15","BUILDER",0,0],
[11912,0,"BUILDER","2014-10-15","BUILDER",0,0],
[11913,0,"BUILDER","2014-10-15","BUILDER",0,0],
]
Run Code Online (Sandbox Code Playgroud)

期望输出

...
[11911,0,"BUILDER","2014-10-15","BUILDER",0,0],
[11912,0,"BUILDER","2014-10-15","BUILDER",0,0],
[11913,0,"BUILDER","2014-10-15","BUILDER",0,0]
]
Run Code Online (Sandbox Code Playgroud)

以下 sed 命令将删除每行的最后一次出现,但我想要每个文件。

sed -e 's/,$//' foo.csv
Run Code Online (Sandbox Code Playgroud)

这也不起作用

sed '$s/,//' foo.csv
Run Code Online (Sandbox Code Playgroud)

sed

15
推荐指数
3
解决办法
4万
查看次数

Openbox 键绑定在 --reconfigure 或重新启动 X 后不生效

 273     <keybind key="W-Return">
 274       <action name="Execute">
 275         <command>lxterminal</command>
 276       </action>
 277     </keybind>
 278     <keybind key="W-Up">
 279       <action name="ToggleMaximizeFull"/>
 280     </keybind>
 281     <keybind key="W-Left">
 282       <action name="MoveToEdgeWest"/>
 283     </keybind>
 284     <keybind key="W-Right">
 285       <action name="MoveToEdgeEast"/>
 286     </keybind>
Run Code Online (Sandbox Code Playgroud)

我在默认的 last</keybind></keyboard>我的~/.config/openbox/rc.xml文件之间添加了这些行(行号来自 vim)。但是,无论是重新启动 X 还是发出命令都不会openbox --reconfigure应用这些设置。

我究竟做错了什么?我将 Arch 与所有默认的 LXDE 包一起使用。

arch-linux keyboard-shortcuts openbox lxde

14
推荐指数
3
解决办法
1万
查看次数

bash:在只读根分区上使用 read &lt;&lt;&lt;"$VARIABLE" 时出现一些问题。任何已知的解决方法?

巧合的是,我不得不使用我的 ATA-ID-to-device-name 脚本(在这里找到:https : //serverfault.com/questions/244944/linux-ata-errors-translating-to-a-device-name/ 426561#426561 ) 在只读 /分区上。如果你好奇,它是一个 Ubuntu 恢复控制台,它可以让你访问你的/分区,但默认情况下它会以只读方式挂载。我对此很高兴,因为否则我可能永远不会发现我的脚本由于特定行而在 R/O 系统上表现得很奇怪,这个:

IFS=: read HostMain HostMid HostSub <<< "$HostFull"
Run Code Online (Sandbox Code Playgroud)

这并不会在没有写权限的工作。不过,我不会认为它会失败。但显然<<<操作员确实需要将一些临时文件写入某个地方。

但是有没有办法绕过临时文件的创建,或者,有没有办法指定文件的写入位置?在 Ubuntu 恢复控制台中,有——奇怪的是——对/run目录的写权限,如果我能以某种方式“告诉”read将临时文件写入其他地方而不是平常,那就可以了。

bash tmp readonly here-document read

11
推荐指数
1
解决办法
829
查看次数

尝试在 Perl 重命名工具 (Debian) 中进行算术运算

假设我有五个 mp3 文件:

01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Run Code Online (Sandbox Code Playgroud)

现在我快速收听文件(只有控制台上的 mplayer 可以解决问题),我发现曲目顺序错误。05实际上是02,其余的必须重命名。所以首先我会做一个临时重命名:

01-trackfoo.mp3

02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Run Code Online (Sandbox Code Playgroud)

现在我们需要一个“转变”:02 应该变成 03,03 应该变成 04,04 应该变成 05。为了尽量减少混淆,ex-05(现在是 00)稍后会被mv编辑。

我的方法是这样的:(perl rename,Larry Wall,Debian 上的默认设置)

rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
Run Code Online (Sandbox Code Playgroud)

以及(稍后,经过一些更多的 RTFM'ing)

rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Run Code Online (Sandbox Code Playgroud)

它们都/e[val]不起作用,特别是因为修饰符除了评估之外不接受任何其他内容,并且一旦您尝试将评估与字符串结合起来就会抛出错误。该bash能做到这一点就好了,例如, foo$((1+6))将被评估到foo7

那么我该怎么做(首选单行,不打算为此编写一个完整的独立脚本)?

debian perl rename arithmetic

9
推荐指数
1
解决办法
1123
查看次数

为什么 pidof 和 pgrep 的行为不同?

我有一个 init 脚本/etc/init.d/myservice用于初始化这样的服务:

...
start() {
  ...
  daemon /usr/sbin/myservice
  ...
}

stop() {
  ...
  pgrep myservice
  pidof myservice
  ps -ef | grep myservice
  ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试停止服务时,这是输出:

10000 10001
10000
root      10000     1  0 09:52 ?        00:00:02 /usr/sbin/myservice
root      9791   9788  0 10:06 pts/1    00:00:00 /bin/sh /sbin/service myservice stop
root      10001  9791  1 10:06 pts/1    00:00:00 /bin/sh /etc/init.d/myservice stop 
root      9805   9796  0 10:06 pts/1    00:00:00 grep myservice
Run Code Online (Sandbox Code Playgroud)

这是预期的吗?为什么pidof只返回我想要停止的服务的正确 PID 并pgrep返回服务 PID 和 init 脚本的 …

grep process init-script pidof

9
推荐指数
1
解决办法
1万
查看次数

连续段落的分组排序(以空行分隔)?

我想我现在在按排序方面很有经验;但是,到目前为止,我还没有找到任何如何对连续行进行排序的信息。

假设我们有一个看起来像这样的文本文件:(当然非常简化)

Echo
Alpha
Delta
Charlie

Golf
Bravo
Hotel
Foxtrot
Run Code Online (Sandbox Code Playgroud)

现在,是否可以分别按每个块的字母数字对行进行排序?我的意思是,结果看起来像这样:

Alpha
Charlie
Delta
Echo

Bravo
Foxtrot
Golf
Hotel
Run Code Online (Sandbox Code Playgroud)

从我在sort手册页中找到的内容来看,内置的 UNIXsort命令可能无法做到这一点。或者甚至可以在不必求助于外部/第三方工具的情况下完成?

text-processing sort

8
推荐指数
3
解决办法
2095
查看次数

ls:在通配符搜索中不显示匹配相同模式的目录,只显示文件

假设我有如下情况,一个典型的商用 PC 情况:

drwxr-xr-x 1 whatever whoever       3 Oct  3 16:40 invoices2009
drwxr-xr-x 1 whatever whoever       4 Oct  3 16:40 invoices2010
drwxr-xr-x 1 whatever whoever       2 Oct  3 16:40 invoices2011
-rwxr-xr-x 1 whatever whoever  440575 Oct  3 16:40 tax2010_1
-rwxr-xr-x 1 whatever whoever  461762 Oct  3 16:40 tax2010_2
-rwxr-xr-x 1 whatever whoever  609123 Oct  3 16:40 tax2010_3
Run Code Online (Sandbox Code Playgroud)

现在让我们偷懒,输入:

$ ls -l *2010*
Run Code Online (Sandbox Code Playgroud)

假设有什么东西在invoices2010目录,按预期的方式将无法正常工作。由于目录名称也包含2010年,ls因此也会列出invoices2010中的文件,尽管我只想列出当前目录中的文件。更有趣的是:想象一下 tax2010* 文件根本不存在,也没有示例中的那三个目录,而是其中的 50 个。是的,我已经试过了:ls甚至不会指出 …

ls shell directory wildcards files

6
推荐指数
1
解决办法
1万
查看次数

使用 Xrender 时整容 XClock:一条漫长而曲折的道路

基本上,它xclock是一个很棒的工具,每个基本的 X 设置都会“内置”它。但是,保持活动状态的同时配置 xclock(模拟)绝对不适合胆小的人。特别是,初学者将没有机会在不深入研究领域的情况下配置模拟时钟,因为您在命令行中设置的所有内容都将仅用于非渲染模式(需要 option )并且默认情况下会被忽略(这意味着,即正在使用)。另外,关于它的文档非常糟糕,而这实际上例子处理与比较少见,因为母鸡的牙齿。因此,我决定开始我自己的方法。XRender.Xresource-norenderXRenderXRender
我希望有一种更简单的方法来完成这一切,但显然没有。首先,这个问题可能会帮助新用户指导如何为“他们的”进行设置xclock;另一方面,我也想问你们是否有任何方法可以改进我的“配置文件”(注意引号)。奇怪的是,它.Xresources被广泛认为是“过时的”和“上个世纪”,但是如果您使用的应用程序确实依赖于老式的方式,使用xrdb.Xresources以及整个堆?

我个人喜欢夜间设计”,因为它非常适合我的桌面风格。所以这就是我所做的:

$ touch ~/.Xresources
$ vi ~/.Xresources

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1
XClock*geometry:          210x210+1020+12
XClock.Clock.majorColor:  rgba:f0/f0/19/7b
XClock.Clock.minorColor:  rgba:a0/c0/f0/c0
XClock.Clock.hourColor:   rgba:c9/66/11/72
XClock.Clock.minuteColor: rgba:00/82/9f/72
XClock.Clock.secondColor: rgba:50/93/30/6f
Run Code Online (Sandbox Code Playgroud)

rgba代表“红色、绿色、蓝色、alpha” - 其中第四个参数 alpha将以十六进制表示法表示不透明度级别:a00将使时钟指针或刻度线不可见;aff将关闭任何不透明度。
到现在为止还挺好。由于我们不想重新启动X服务器以使这些事情生效,我们将简单地将我们的设置合并到那些可能(或者像往常一样,可能不存在)已经存在的设置中:

$ xrdb -merge …
Run Code Online (Sandbox Code Playgroud)

x-resources

6
推荐指数
1
解决办法
4742
查看次数

screen &amp; xterm:当窗口垂直划分时,如何在一个窗格中用鼠标选择文本

有趣的是,这tmux对某些人来说也是一个问题:http : //daemonforums.org/showthread.php?t=7311

但目前我坚持使用screen,我想知道如何screen在这方面做出“行为”。

除非线条长于窗格的宽度,否则用鼠标选择文本是没有问题的。我已经尝试过:width, 有和没有-w选项。(包装是打开的,否则会看起来像一团糟(:+wrap))

哦,:width对设置非常挑剔。如果你设置的width太高,长的线会导致整个终端来回移动(即如果你的bash提示是user@host $它只会显示为r@host $),看起来非常难看。

选择一条分成几倍窗格宽度的长线将导致以下行为:

  • 选择器(逆)将显示超出左侧窗格中,重叠到右窗格中。这看起来有问题,首先。选择器也应该在窗格的右边框处换行。
  • 粘贴选区有时会导致长行在第一部分行被截断​​,截断其余部分;有时甚至尝试添加|(!),尝试继续该行,就好像它是一个多行脚本(结果bash: syntax error near unexpected token '|':)啊。

即使使用鼠标,这也不能以某种方式工作吗?

gnu-screen terminal-multiplexer xterm split

6
推荐指数
1
解决办法
2581
查看次数