我试图用 Cron Jobs 自动清理我的 Ubuntu 系统
我试图简化这个:
sudo find /var/log -type f -name "*.1.gz" -delete
sudo find /var/log -type f -name "*.2.gz" -delete
sudo find /var/log -type f -name "*.3.gz" -delete
sudo find /var/log -type f -name "*.4.gz" -delete
,etc...
Run Code Online (Sandbox Code Playgroud)
像下面这样的一个命令但不起作用,可能是因为我不知道......
for i=[^0-9]; sudo find /var/log -type f -name "*.$i.gz"
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的但也没有奏效...:
$i=[^0-9]; sudo find /var/log -type f -name "*.$i.gz"
i=[^0-9]; sudo find /var/log -type f -name "*.$i.gz"
i=[^0-9]+$; sudo find /var/log -type f -name "*.$i.gz"
Run Code Online (Sandbox Code Playgroud)
我看不到最后四个的任何输出......有人产生错误......
那么正确的命令/语法是什么?
以及任何其他保持我的“迷你”服务器清洁的想法?
其他问题:如果我运行sudo …
假设我运行命令man who,我必须一直按空格或回车才能显示所有内容。有没有办法一次显示所有内容?
我正在开发一个二进制可执行程序命令来执行程序并将输出返回到文本字段中。
命令的参数涉及命令本身,因为它将在命令行上键入,以及目录。所以执行操作的例程首先切换到目录,然后执行命令。
例如,如果我想some.cmd在目录中执行命令,/home/user参数是command = 'some.cmd'和directory = '/home/user'。
我发现这some.cmd是行不通的,但如果我将命令更改为/home/user/some.cmd命令有效。但是该命令ls -l有效。我还注意到cd无法识别该命令。如果我通过ssh设置命令远程运行它,ssh user@localhost 'cd /home/user && ./some.cmd'它就可以工作。
似乎在 shell 中执行命令时存在的某些设置在直接运行时不存在,但是通过这样做ssh似乎可以为其创建设置。
对此有什么解释吗?
更新:
经过一些查询,我了解到用于执行命令的 API 没有在 shell 中执行,或者没有在控制台可用的正常环境中执行。使用/bin/sh -c "cd ..."选项执行命令后,问题不再存在。这是ssh user@localhost 'command ...'给我的环境。我不太确定技术细节,但显然,当您在普通 shell 中执行时,可用环境的存在并不总是可用于由操作系统直接执行的命令。
在测试环境中,我们有一个日志文件的目录结构,如下所示:
/var/Logs/int/app-id/region-code/log/file-name.log
/var/Logs/sat/app-id/region-code/log/file-name.log
/var/Logs/cat/app-id/region-code/log/file-name.log
Run Code Online (Sandbox Code Playgroud)
每个环境有许多应用程序 ID,每个应用程序 ID 有多个区域代码(取决于应用程序)。
是否有一个命令可以让我将目录从 int 更改为 sat,并使路径的所有其余部分保持不变?类似于以下内容:
$ pwd
/var/Logs/int/abc/01/log
$ cdswap int sat
$ pwd
/var/Logs/sat/abc/01/log
$ cdswap abc def
$ pwd
/var/Logs/sat/def/01/log
Run Code Online (Sandbox Code Playgroud)
如果这也有效,那将是一个奖励:
$ cdswap def/01 ghi/02
$ pwd
/var/Logs/sat/ghi/02/log
Run Code Online (Sandbox Code Playgroud)
如果没有这样的命令,我可以设置一个别名来有效地做同样的事情吗?那会怎样?
谢谢你的帮助!
我想知道是否有一个过滤器命令来引用输入行。
所以当管道:
line number 1
line number 2
line number 3
Run Code Online (Sandbox Code Playgroud)
到它,你得到:
"line number 1"
"line number 2"
"line number 3"
Run Code Online (Sandbox Code Playgroud)
我需要这个命令来通过管道传输行以xargs确保xargs将其line number 1视为一个参数而不是三个参数。我相信它还有许多其他用途。
有这样的命令吗?这叫什么?
如何将多个文件连接在一起,以使最终输出中的列之间没有任何间隙?例如,如果以下是两个输入: input1.txt
22211 21111 11111
22222 22222 11111
22222 11111 23211
Run Code Online (Sandbox Code Playgroud)
输入2.txt
22211 21111
22222 20002
22222 11111
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是这样的:
22211 21111 11111 22211 21111
22222 22222 11111 22222 20002
22222 11111 23211 22222 20002
Run Code Online (Sandbox Code Playgroud)
但问题是当我使用这个命令时:
paste input1.txt input2.txt > out.txt
Run Code Online (Sandbox Code Playgroud)
然后 out.txt 上有一个空白,其中两个文件连接在一起,例如:
22211 21111 11111 22211 21111
22222 22222 11111 22222 20002
22222 11111 23211 22222 20002
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能看不到这个差距?我应该提到我有 37 个 txt 文件(hap1.txt hap2.txt ..hap37.txt),我希望将它们并排连接在一起。请问有什么建议吗?
我需要一个 Unix 命令来将 UNICODE 格式的 .csv 文件转换为 ANSI 格式。
该文件是从 Cognos 环境导入的,我无法对 cognos 中的格式进行任何更改。
我试过这样做:
echo " mv /server/today/logfile1 /nfs/logs/ && gzip /nfs/logs/logfile1" | sed 's|logfile1|logfile2|g'
Run Code Online (Sandbox Code Playgroud)
它打印:
mv /server/today/logfile2 /nfs/logs/ && gzip /nfs/logs/logfile2
Run Code Online (Sandbox Code Playgroud)
这是一个 bash 命令。我怎样才能让它被执行,而不仅仅是打印它?
当一个命令以什么方式或以什么格式通过管道传输到另一个命令时,管道输出存在/发送?是临时文件吗?是字符串吗?接收管道输出的命令如何解码/读取该输出?
例子:
echo "Someone string" | ./program | tail
Run Code Online (Sandbox Code Playgroud)
程序“ program”是否echo以文件形式接收输出?程序将如何读取该输入?
pwd是我的主目录。ls */ -d显示目录。
~$ ls */ -d
Blog/ Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/
Run Code Online (Sandbox Code Playgroud)
并ls -a显示所有隐藏的目录和文件。隐藏目录- .cache,.local等等。
$ ls -a
. .cache .gnupg .xsession-errors.old
.. .config .gtkrc-2.0 Templates
.bash_history Desktop .gtkrc-xfce Pictures .themes
.bash_logout .linuxmint .pki Videos
.bashrc Documents .local .profile .viminfo
Blog Downloads .mozilla Public .Xauthority
Music .ssh .xsession-errors
Run Code Online (Sandbox Code Playgroud)
但是当我运行时ls -ad */,它不会显示任何隐藏目录。有人愿意解释吗?
$ ls -ad */
Blog/ Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/
Run Code Online (Sandbox Code Playgroud)