1

一連のディレクトリと、その中に含まれる画像があります。

/Volumes/library/Originals/2012/2012-05-13 Event/filename.jpg
/Volumes/library/Originals/2011/2011-03-11 Event/filename.jpg
/Volumes/library/Originals/2011/2011-01-12 Event/filename.jpg
/Volumes/library/Originals/2009/2019-07-11 Event/filename.jpg

bash を使用して、このディレクトリ ツリーへのシンボリック リンクを単一のディレクトリに作成するにはどうすればよいですか?

/image-links/filename.jpg
/image-links/filename1.jpg

再帰的なディレクトリをサポートしていない Mac OS X 10.8 で写真のスクリーン セーバーを実行するには、これが必要です。これを毎晩行うcronジョブを作成できると思います。ご協力いただきありがとうございます。

4

4 に答える 4

3

これに亀裂を入れてください:

#!/bin/sh

seq=1
for f in $(find /Volumes/library/Originals -name *.jpg)
do
    base=$(basename "$f" .jpg)
    new=$(printf "%s%03d.jpg" "$base" $seq)
    ln -fs "$file" "/image-links/$new"
    seq=$(expr $seq + 1)
done
于 2012-08-06T14:00:03.640 に答える
1

このワンライナーはLinuxで非常にうまく機能しています。

find /Volumes/library/Originals -name "*.jpg" |
    awk '{print "ln -s \""$0"\" /image-links/filename_"FNR".jpg"}' | sh

パイプの説明

最初にファイルを見つけます | 2 番目にコマンドを作成 |3 番目にコマンドを実行

非常にシンプルで、テスト済みで、cron で動作します。

ペトル

于 2012-08-06T14:37:04.510 に答える
1
PREFIX="filename"
SOURCEDIR="/Volumes/library/Originals"
DESTDIR="image-links"

i=0
cd $DESTDIR
find "$SOURCEDIR" -name \*.jpg | while read f
do
  ln -s "$f" $PREFIX$i.jpg
  i=$((i+1))
done
于 2012-08-06T14:04:14.977 に答える
0

ファイルが同じ深さにあると仮定すると、次のような for ループが実行されます。

i=1
for file in /Volumes/library/Originals/*/*/*.jpg; do
    base=${file##*/}
    ln -s "$file" "/image-links/${base%.*}$((i++)).jpg"
done

リンクに増分番号を付ける代わりに、代わりにディレクトリ名をリンク名に追加できます。

for file in /Volumes/library/Originals/*/*/*.jpg; do
    base=${file##*/}
    dir=${file%/*} dir=${dir##*/}
    ln -s "$file" "/image-links/$dir $base"
done
于 2012-08-06T15:42:52.840 に答える