我想创建一个 tarball,其中包含ctime小于 30 天的目录中的文件。我发现的大多数教程基本上都推荐做这样的事情:
tar cvf foo.tar $(find ~/POD -type f -ctime -30)
Run Code Online (Sandbox Code Playgroud)
问题是我想压缩的很多文件的名称中都包含空格。这意味着该tar命令将基于空格分隔,这意味着完整的文件路径将被分解。
所以现在我试图让find命令返回一个带引号的文件路径列表。所以这是我尝试过的:
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
Run Code Online (Sandbox Code Playgroud)
但是这个命令也把所有基于空格的文件名分解了。然后我尝试了这个:
oldifs=$IFS
IFS=\n
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
IFS=$oldifs
Run Code Online (Sandbox Code Playgroud)
但这给了我相同的结果。
有没有办法可以将完整路径名传递给tar并让所有内容都使用名称中的空格?
我想使用 ftp 将备份档案从一台服务器上传到另一台服务器。在我的备份 cronjob 中,我使用此脚本上传文件:
MEDIAFILE=/var/somedir/somefile.encrypted
if [ -r $MEDIAFILE ]
# File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
put $MEDIAFILE
quit
END_SCRIPT
fi
Run Code Online (Sandbox Code Playgroud)
此脚本返回:/var/somedir/somefile.encrypted: No such file or directory。但是该文件存在并且执行脚本的用户有权读取该文件。
是什么导致了这个错误?
在/bin/shand /bin/bash(我猜还有很多其他 shell)中,当脚本中的任何命令行退出时的状态代码不是 0 时,启动脚本#!/bin/sh -e(或set -e在脚本中的某个地方执行)会导致脚本中止。
是否有任何等效或解决方法可以在 perl 脚本中获得相同的行为?(即,如果任何指令产生错误,或者如果使用system(...)或反引号执行的任何外部命令返回错误代码,则立即退出)
问题:
We have many dev/qa/prod RH/Solaris servers with many accounts having ssh trust between them, including between servers in different environments (prod->prod, but also qa->prod). I know this is a bad practice, and the first step I'm trying to take to resolve it is to understand which accounts on which boxes can ssh to which other accounts on which boxes without a password.
My approach was going to be a shell script to log into a specified list of servers, …
我创建名为 - 192.9.200.1 的新文件
touch 192.9.200.1
Run Code Online (Sandbox Code Playgroud)
然后我创建一个指向 192.9.200.1 文件的新链接
ln -s 192.9.200.1 file
Run Code Online (Sandbox Code Playgroud)
所以最后我得到:
ls -ltr /tmp
-rw-r--r-- 1 root root 0 May 8 19:39 192.9.200.1
lrwxrwxrwx 1 root root 11 May 8 19:39 file -> 192.9.200.1
Run Code Online (Sandbox Code Playgroud)
但是当我对 192.9.200.1 文件执行ls -ltr时,我看不到其他链接是否指向 192.9.200.1
ls -ltr 192.9.200.1
-rw-r--r-- 1 root root 0 May 8 19:39 192.9.200.1
Run Code Online (Sandbox Code Playgroud)
识别文件或目录是否有链接的方法是什么,
我想编写一个由我的开发构建服务器执行的脚本,该脚本将在构建和运行新容器之前删除任何“类似”的 docker 容器。
下面是我需要的 bash 脚本的伪代码
var name = $1
var number_of_results = # of containers returned from $(docker ps -a | grep "$name")
if(number_of_result > 0)
docker rm -f $(docker ps -a | grep "$name")
Run Code Online (Sandbox Code Playgroud) 我在 bash 变量 ( ) 中有一个域名$TARGET,并且我想以可靠的A方式在 bash 脚本中获取它的 IPv4(记录)地址(我还想获取 IPv6AAAA记录(如果存在))。
即 bash/unix 命令将: (i) 打印 DNS 解析的 IP 地址(并且仅是 IP 地址) (ii) 如果没有找到该域的 DNS 记录,则不向 stdout 打印任何内容(或非零退出) (iii) 让我选择索取A或AAAA记录。
host "$TARGET"打印出很多人类可读的内容,但我不愿意解析它们。
dig +short看起来很有希望,但在某些情况下,它还会打印我不理解或不关心的其他警告消息。
$ dig +short -t A "$TARGET"
;; Warning: Client COOKIE mismatch
1.2.3.4
Run Code Online (Sandbox Code Playgroud)
Debian 测试/书呆子。Bash v5.2(通过 apt 安装)
我写了一个 munin-plugin 来计算 lighttpd 的 http-statuscodes。剧本:
#!/bin/bash
######################################
# Munin-Script: Lighttpd-Statuscodes #
######################################
##Config
# path to lighttpd access.log
LIGHTTPD_ACCESS_LOG_PATH="/var/log/lighttpd/access.log"
# rows to parse in logfile (higher value incrase time to run plugin. if value to low you may get bad counting)
LOG_ROWS="200000"
#
#munin
case $1 in
autoconf) # check config
AVAILABLE=`ls $LIGHTTPD_ACCESS_LOG_PATH`
if [ "$AVAILABLE" = "$LIGHTTPD_ACCESS_LOG_PATH" ]; then
echo "yes"
else
echo "No: "$AVAILABLE
echo "Please check your config!"
fi
exit 0;;
config) # graph config
cat …Run Code Online (Sandbox Code Playgroud) 我正在尝试为应用程序编写服务脚本。所以我可以这样控制它:
./myscript.sh start|stop|status
Run Code Online (Sandbox Code Playgroud)
启动时pid.file创建进程 ID,并基于它我可以检查状态并停止进程。在停止命令中我删除了pid.file- 没关系。
但是,如果应用程序以异常方式崩溃 - 关闭电源等,则pid.file不会删除,我需要手动删除它。
如何在脚本中正确处理这种异常情况?
我正在尝试通过 PowerShell 脚本关闭服务器共享文件夹中的所有打开文件。我发现以下脚本仅关闭一个驱动器 (F:) 上的文件,但是,该服务器有 3 个驱动器(F:\、G:\、H:),我想将它们全部关闭。
net files |
where { $_.Contains( "F:\" ) } |
foreach { $_.Split( ' ' )[0] } |
foreach { net file $_ /close }
Run Code Online (Sandbox Code Playgroud)
有没有办法将丢失的驱动器添加到这个脚本中,或者我必须为每个驱动器单独使用相同的脚本?
我试过{ $_.Contains( "F:\", "G:\", "H:\" ) }但没有用
感谢您的帮助!