检查一个目录是否递归地反转路径
我有点困惑在这里! 我不知道如何提出这个问题。
可能是一个例子。
我正在编写一个bash脚本,用于检查名为“FNS”的特定文件夹是否在当前目录中。 要检查文件是否存在,我这样做。
FOLDER=FNS
if [ -f $FOLDER ];
then
echo "File $FOLDER exists"
else
# do the thing
fi
问题出现如果文件不存在! 我希望脚本记下当前路径并移回目录[我的意思是cd ..在命令行中,我不确定我是否在这里使用正确的词汇表]并检查文件是否存在,如果不存在,再次向后移动一步,直到它存在的目录显示[它肯定存在]。当找到时将路径存储在变量中。 目前的执行目录不应该改变。我尝试将pwd
传递给一个变量,直到最后一个斜杠和其他一些东西没有成功!
希望我能在这方面做点什么。 喜欢总是建议,算法和变通办法欢迎:)
试试这个,用圆括号启动一个子shell,这样cd命令不会改变当前shell的当前目录
(while [ ! -d "$FOLDER" ];do cd ..;done;pwd)
bash pushd和popd内置命令可以帮助你。 在伪代码中:
function FolderExists() { ... }
cds = 0
while (NOT FolderExists) {
pushd ..
cds=cds+1;
}
store actual dir using pwd command
for(i=0;i<cds;i++) {
popd
}
一种使用perl
。
script.pl
内容(该目录是硬编码的,但很容易修改程序以读取它作为参数):
use warnings;
use strict;
use File::Spec;
use List::Util qw|first|;
## This variable sets to 1 after searching in the root directory.
my $try;
## Original dir to begin searching.
my $dir = File::Spec->rel2abs( shift ) or die;
do {
## Check if dir 'FNS' exists in current directory. Print
## absolute dir and finish in that case.
my $d = first { -d && m|/FNS$| } <$dir/*>;
if ( $d ) {
printf qq|%sn|, File::Spec->rel2abs( $d );
exit 0;
}
## Otherwise, goto up directory and carry on the search until
## we reach to root directory.
my @dirs = File::Spec->splitdir( $dir );
$dir = File::Spec->catdir( @dirs[0 .. ( $#dirs - 1 || 0 )] )
} while ( $dir ne File::Spec->rootdir || $try++ == 0);
使用搜索将开始的目录运行它。 它可以是相对或绝对路径。 喜欢这个:
perl script.pl /home/birei/temp/dev/everychat/
要么
perl script.pl .
如果找到目录,它将打印绝对路径。 我的测试的一个例子:
/home/birei/temp/FNS
链接地址: http://www.djcxy.com/p/97115.html
上一篇: Check if a directory exists recursively reversing the path