我试图递归遍历/home目录中的所有文件。我想对每个文件执行一些linux命令。因此,我使用for循环如下:
for i in /home/**/*
我也把下面的声明作为脚本的开始:
商店-s全球之星
shopt -s nullglob
但它被困在了循环中。这可能是处理这么多文件的问题。如果我将另一个目录(没有文件)分配给for循环,那么它将正确遍历。
我还能尝试什么。
完整守则:
#!/bin/bash
shopt -s globstar
shopt -s nullglob
echo "ggg"
for i in /home/**/*
do
NAME=${i}
我正在为我的一个程序写一个函数,它需要搜索一些文件夹,直到我们找到一个叫"userfiles“的文件夹,然后我们压缩这个文件夹,给出它所在的文件夹的文件名。下面的方法是最好的方法吗?
compress(){
NAME=$(cat $USER_HOME/server.txt | sed -e "s/ //g")
USERS=/var/www/home/user/area/*/*/*/
IDS=${PWD##*/}
# Apache Logs
tar -zcvf logs-$NAME.tar.gz /var/log/apache2
# User Logs
for i
我希望为存在于不同子目录中的文件运行一个程序,然后将输出重定向到输出文件。我希望将输出保存到程序运行的目录中。
所以我想做这样的事情:
for x in */*.txt; do command $x > output.fsa; done
我的问题是:
上面的循环正确吗?我是否应该改变目录,以便将输出保存在执行命令的目录上,还是linux处理它?
对于如何在输出文件中给出目录的名称有什么想法吗?
我在我正在管理的QNAP Linux NAS系统的用户中发现了一个坏习惯文件命名。我们有一个Mac网络,一些文件夹和文件使用"/“字符命名,我知道它给Linux文件系统带来了问题。事实上,在Mac端,包含"/“的文件就会消失,因为QTS会自动用"/”替换所有实例。
我想搜索并重命名文件名,从":“到"_”。
在网上讨论时,我发现我可以用终端从我的Mac连接到Linux,并执行如下脚本:
for f in $(find /share/Public/demofind -name "*:*"); do mv $f ${f/:/_}; done
我在一个目录中有命名为1到700的文件夹(中间有很多缺失的数字)。在每个文件夹中都有需要合并并转换为pdf文件的jpg文件。每个文件夹中的图像都必须创建为单独的pdf文件。为了合并和转换图像,我使用了以下脚本:
cd subfolder1
for i in *.jpg; do num=`expr match "$i" '\([0-9]\+\).*'`;
padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done
FILES=$( find .
我是使用Linux终端的新手,所以我刚刚开始学习我可以使用的命令。我已经知道了如何使用Linux终端列出目录中的文件,以及如何根据文件大小列出它们。我想知道是否有一种方法只列出特定文件大小的文件。现在,我正在尝试列出大小为零的文件,比如您可以使用touch命令创建的文件。我查看了在使用ls时可以使用的标志,但我找不到我要找的确切内容。这就是我现在所拥有的:
ls -lsh /mydirectory
"mydirectory“部分只是一个占位符。有没有什么我可以添加的,只列出零大小的文件?
最近,在大学里,我们开始使用Linux和Bash。我们有一个任务,必须创建名称为Directory1、Directory2等的5个目录。在每个目录中,我们必须创建10个文件,其中包含一个随机数。
我是这样开始的,但我不知道下一步该怎么做:
#!/bin/bash
for i in {1..5}
do
mkdir "Directory${i}"
done
你能帮帮我吗?
我正在学习Linux脚本,并尝试设置一个函数来查找当前目录中的所有文件。我知道我可以使用ls,但我想知道是否有一种方法可以将当前目录作为命令来获取,并将其传递给参数。
#!/bin/bash
check_file() {
for f in $1:
do
echo $f
done
}
check_file pwd
这只会打印出pwd:,显然不是。
我们有一个运行两个程序的RHEL Linux服务器,它们的备份被复制到另一个运行Ubuntu Linux的服务器上。在cron作业中运行了一个"cleanup“脚本,该脚本应该删除这些超过10天的备份,但它不起作用。事实上,我无法让它工作,甚至手动运行它。脚本如下-
#!/bin/bash
# bash shell script to cleanup jira backup files
# The script will remove files that are 10 days or older
#
# Remove jira backup files
for FILE in `f
首先,这是我在这里的第一篇文章,我必须指明我是一个完全的Linux新手。
我们最近为办公室购买了一个QNAP NAS盒子,在这个盒子上我们有大量的数据,这些数据是从一台旧的Mac XServe机器上复制过来的。许多文件和文件夹最初在名称中有正斜杠(HFS+从一开始就不应该允许这样做),当复制到NAS时,它们都被冒号取代。
我现在想将所有冒号重命名为下划线,并在此处的另一个线程中找到以下命令:
但是,这个机器上的Linux不能理解rename命令,所以我不得不使用mv。我已经尝试使用下面的代码,但这只适用于当前文件夹中的文件,有没有方法可以将其更改为包括所有子文件夹?
for f in *.*;
我想搜索具有特定名称的文件,从当前工作目录开始,以可移植的方式在层次结构中向上搜索,直到我到达根目录或等效目录。
例如,在Linux环境中,我知道我可以做到
dir = '.'
while File.expand_path(dir) != '/' do
<check for the file>
dir = File.join dir, '..'
end
...but有没有一种更好的方式,不管父目录链在哪里结束都能工作?
此外,重构那个局部变量会很好,但我还没有想出一个好的方法。
我正在linux上学习bash,我找到了用于“同时循环从文件中读取”的脚本,并做了如下修改,我正在尝试读取包含所有git repos的列表文件,并且我想迭代所有这些git repos并为它们运行git status:
while read line;
do echo $line;
cd $line;
git status;
done < repo.list
这个部分工作正常,我可以在stdout中看到每个repo的状态,但是当我尝试将输出写到另一个文件时,它不起作用:
while read line;
do echo $line;