小编tha*_*isp的帖子

“find -exec mv”缺少 4 个文件

我想将大约 1000 个 mp3 文件从包含复杂嵌套目录结构的名为“music”的目录移动到名为“mp3s”的单个目录,以便我可以在车中收听它们。

我使用的命令是:

find music -name '*mp3' -exec mv -v -t mp3s {} +
Run Code Online (Sandbox Code Playgroud)

然而,当我执行命令时发生了一些奇怪的事情。命令完成后,我注意到省略了四个文件。这些文件是:

"music/Michael Hedges/Michael Hedges - Taproot/06 - Chava's Song.mp3"
'music/Michael Hedges/Michael Hedges - Aerial Boundaries/04 - Ragamuffin.mp3'
'music/Jonas Hellborg/1988 - Bass/07. Blues For LW.flac.mp3'
'music/Jonas Hellborg/1988 - Axis/03. Roman.flac.mp3'
Run Code Online (Sandbox Code Playgroud)

我再次执行了完全相同的命令,这一次先前省略的四个文件已按预期移动。

我无法想象为什么find会做出这样出乎意料的事情。为什么会发生这种情况?

在 Ubuntu 上的 bash shell 中执行。

find mv

19
推荐指数
1
解决办法
974
查看次数

我应该在 crontab 中使用 1,15 还是 */15 每 15 天运行一次命令?

据我所知,crontab 有这些字段,从左到右开始。

1   minutes 0-59
2   hours 0-23
3   days of month 0-31
4   month 1-12
5   day of the week 0-6
6   command
Run Code Online (Sandbox Code Playgroud)

我想在 15:30 每 15 天运行一次 foo 命令这是正确的,因为当月的运行命令 1 和 15 有 30 天(31 天)所以每 15 天运行一次

30 15 1,15 * * /sbin/foo -a 1> /dev/null
Run Code Online (Sandbox Code Playgroud)

这个语法也正确吗?

30 15 */15 * * /sbin/foo -a 1> /dev/null
Run Code Online (Sandbox Code Playgroud)

系统是使用 Dillon Cron 的 Slackware Linux

cron

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

我可以在 crontab 条目之后为 crontab 中的每个条目添加注释吗

我们在 crontab 文件中有一堆 crontab 条目。其中一些被暂时注释掉。是否可以在条目处添加评论作为注释掉的原因。

例如

#00 20 * * *  sh test.sh  "Adding comments here, reason for commenting out"
Run Code Online (Sandbox Code Playgroud)

cron

10
推荐指数
2
解决办法
3万
查看次数

如何更改 virsh edit 的默认文本编辑器?

我最近在 Arch Linux 上安装了 virt-manager,与在 Ubuntu 下不同,第一次启动 virsh-edit 时没有提示我选择文本编辑器。相反,XML 文件是在 vi(或 vim,不确定)中打开的。

从 RedHat 档案中的这个线程中,我想如果我只是添加到~/.bashrc

export EDITOR=/usr/bin/nano
Run Code Online (Sandbox Code Playgroud)

这样就可以解决问题。但设置 EDITOR 环境变量不起作用。

此外,启动它EDITOR=geany sudo virsh edit myWINVM给出了相同的结果,就像尝试使用不同的编辑器一样:EDITOR=geany sudo virsh edit myWINVM 如此处所述

我看到该变量实际上已被设置:

[~]$ printenv
SHELL=/bin/bash
SESSION_MANAGER=local/virtland:@/tmp/.ICE-unix/5451,unix/virtland:/tmp/.ICE-unix/5451
WINDOWID=27262979
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg
XDG_MENU_PREFIX=xfce-
SSH_AUTH_SOCK=/tmp/ssh-j36TZui4fOt5/agent.5457
DESKTOP_SESSION=Xfce Session
SSH_AGENT_PID=5458
EDITOR=/usr/bin/nano
...
Run Code Online (Sandbox Code Playgroud)

但是virsh edit MYVM仍然在 vi 中打开 XML。

我需要在 Arch 中做一些不同的事情吗?virsh 最近的更新中更改此设置的方法是否已更改?

bash editors environment-variables virsh libvirt

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

通过“kill”命令发送信号名称的正确或建议方法是什么?

我读了很多关于命令使用的教程kill主要是3种方法

kill -15 <pid>
kill -SIGTERM <pid>
kill -TERM <pid>
Run Code Online (Sandbox Code Playgroud)

出于脚本目的以及 Macos 的可移植性,将不会使用代码编号。因为kill -lmacos 与 Linux 不同。因此,在这里输入播放信号名称。

问题

  • 通过命令发送信号名称的kill正确或建议方法是什么?

我是说:

  • SIG什么的还是什么

为什么?这两种方法的存在只有一个原因,对吗?是否有强制理由使用一种方法而不是另一种方法?

环境

这种情况适用于 Ubuntu 桌面/服务器和 Fedora 工作站/服务器

linux kill signals options

7
推荐指数
1
解决办法
879
查看次数

更换 GKSU

在 CentOS 5 的旧时代,我有一个以另一个用户身份运行的应用程序。我创建了一个 .desktop 文件,它运行如下命令:

gksu -u anotheruser someapplication
Run Code Online (Sandbox Code Playgroud)

当用户单击该图标时,弹出窗口要求输入“另一个用户”的密码,当密码正确时,“某个应用程序”启动。

现在,在 CentOS 7 的现代,我找不到这种行为的替代品。我尝试过beesu:

beesu -l -P someapplication anotheruser
Run Code Online (Sandbox Code Playgroud)

但它要求我输入 root 密码而不是“另一个用户”密码。

我也尝试过 pkexec:

pkexec --user anotheruser someapplication
Run Code Online (Sandbox Code Playgroud)

结果相同。

这两种方法在寻找正确的显示变量时也存在问题:

Failed to parse arguments: Cannot open display:
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

谢谢。

centos polkit gksu pkexec

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

如何找到调度策略和活动进程的优先级?

我想制作一个 shell 脚本来查找所有活动进程并向用户打印调度策略。我希望结果是这样的。

pid 3042's current scheduling policy: SCHED_OTHER
pid 3042's current scheduling priority: 0
pid 3043's current scheduling policy: SCHED_OTHER
pid 3043's current scheduling priority: 0
pid 3044's current scheduling policy: SCHED_OTHER
pid 3044's current scheduling priority: 0
Run Code Online (Sandbox Code Playgroud)

我已经成功做到了这一点,但仅限于使用pschrt命令的单个进程。

linux process real-time shell-script

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

Bash 补全在单词后附加一个空格 - 我怎样才能阻止这个?

我正在为 Bash 编写一个制表符补全脚本,使用 Python 来提供补全结果。我正在使用虚拟脚本来显示我遇到的问题,内容并不重要。

我有一个名为 的 Bash 脚本dothat,其中包含以下代码:

var=$1
echo "You have chosen $var"
Run Code Online (Sandbox Code Playgroud)

我还有一个为 创建制表符完成的脚本dothat,称为dothat-completion.bash

_comp_func()
{
    COMPREPLY=()

    # Gets the output of a Python file and puts it into a variable
    fruits=$(python fruit.py)

    COMPREPLY=($(compgen -W "${fruits[*]}" -- $cur)) 
}

complete -F _comp_func dothat
Run Code Online (Sandbox Code Playgroud)

以及(简单)内容fruit.py

print('fruit:', end='')
Run Code Online (Sandbox Code Playgroud)

Python 脚本只是将字符串打印到 STDOUT,然后由 Bash 补全函数捕获该字符串,并用于生成制表符补全的可能匹配项。

现在,我想用这个脚本做的是,当我输入 时dothat <TAB>,它将完成到dothat fruit:,末尾没有空格。问题是,当我键入dothat 并按 Tab 时,它会完成为dothat fruit: ,并带有不需要的尾随空格。

我尝试将Python的内容更改为以下内容,并且所有结果都相同:

print('"fruit:"', end='') …
Run Code Online (Sandbox Code Playgroud)

bash python autocomplete shell-script

5
推荐指数
1
解决办法
1584
查看次数

tty7的终端视图在哪里

当我使用ctrl+ alt+ F7,并切换到X11服务器,我可以看到桌面UI。

当我切换到ctrl+ alt+[ F1- F6] 时,我可以看到虚拟终端。

现在如何访问虚拟终端 7,即使 X 并行运行,我也可以在其中输入命令

linux ubuntu x11 tty

5
推荐指数
2
解决办法
262
查看次数

配置 systemd 计时器在首次运行后每小时运行一次

我有一项每小时运行一次的服务(使用OnCalendar=hourly)。如果系统处于 24/7 状态,这非常有效,但在退出挂起/休眠状态后就会变得混乱。该服务将立即运行 - 这就是我想要的 - 但随后它会在每小时的顶部再次运行,无论自上次运行以来已经过去了多少时间。

有没有办法将计时器配置为以 1 小时为间隔运行?

arch-linux systemd

5
推荐指数
1
解决办法
9198
查看次数